List
有序可重复
ArrayList
ArrayList数据结构是数组。查询快,增删慢。ArrayList是线程不安全的,允许元素为null 。
Vector
线程安全的数组,效率较差,已经过时不用。
LinkedList
LinkedList 数据结构是双向链表,插入删除比较方便。LinkedList 是线程不安全的,允许元素为null 。
Map
HashMap :
jdk1.8中HashMap底层是哈希表数据结构,数组+链表+红黑树,HashMap是线程不安全的,允许使用null键和null值,
HashMap根据键的HashCode值存储数据,具有很快的访问速度。
HashMap存入的键值对在遍历时的顺序是随机的。
HashMap不支持并发
HashTable:
线程安全,使用synchronized锁住全部数据,效率较低。
LinkedHashMap:
LinkedHashMap 是HashMap的一个子类,默认LinkedHashMap遍历时输出的顺序和put输入的顺序是相同的。
LinkedHashMap有两种排序方式:插入排序和访问排序(修改或访问一个元素后,将该元素移到队列末尾),默认是插入排序。使用accessOrder来标记使用哪种排序方式,accessOrder==true时,表示使用访问排序,默认为false;
LinkedHashMap使用了双向链表来保证了顺序性。
public LinkedHashMap(int initialCapacity, float loadFactor, boolean accessOrder) { super(initialCapacity, loadFactor); this.accessOrder = accessOrder; }
TreeMap:
TreeMap底层是红黑树数据结构,线程不安全,可以用于给Map集合中的键进行排序
TreeMap遍历出来的是排序后的键值对。
ConcurrentHashMap
ConcurrentHashMap是线程安全的,jdk1.8使用CAS和volatile实现。而jdk1.8以前通过锁分段技术、可重入锁实现。
支持并发,可以一边更新一边遍历
Set
HashSet
存放键值对,无序不重复。