常用数据结构的区别
Java中几种常用的数据结构主要分为Collection和Map两个接口

Collection
Collection是java集合框架体系的根接口,定义了一组对象和它子类需要实现的方法。
在 JDK 8 以后,Collection 接口还提供了从集合获取连续的或者并行流:
Stream<E> stream()
Stream<E> parallelStream()
-
List
List是有序的队列;
List中的每一个元素都有一个索引,第一个元素的索引值是0,往后的元素的索引值依次+1;
List中允许有重复的元素;
ArrayList
基于数组实现;
线程不安全只能在单线程环境下使用,多线程环境下可以考虑使用Collections.synchronizedList(List l)函数返回一个线程安全的ArrayList类;
ArrayLis更适合读取、设置数据(get/set);
LinkedList
基于链表的数据结构
同样线程不安全
LinkedList跟适合新增、删除数据(add/remove);
Vector
基于数组实现;
vector是线程安全的;
-
Set
散列集,不能保证存储元素的顺序;
与List不同Set没有重复元素的集合;
Set结构其实就是维护一个Map来存储数据,利用Map结构保证key值唯一性;
HashSet
查看源码可以知道HashSet底层使用HashMap来保存所有元素,其实就是个限制了功能的HashMap;
除了不能重复的特性外HashSet的存储是无序的;
允许使用null元素;
HashSet没有提供get()方法,同HashMap一样,Set内部是无序的,只能通过迭代的方式获得
TreeSet
底层实现TreeMap
-
Map
HashMap
元素成对,元素可为空(key/value) ;
线程不安全;
HashMap的迭代器是Iterator;
单线程下比HashTable要快
HashTable
元素成对,线程安全,元素不可为空
线程安全;
HashTable的迭代器是enumerator;