List接口有序的储存数据,可以储存重复的数据,允许null值
Set接口无序的储存数据,不允许重复的数据,只允许一个null值
ArrayList底层是可变数据Object[],默认大小为0,执行add方法时赋初始值10,每次扩容增加0.5倍,是线程不安全的集合,随机访问效率高,修改涉及到数据的移动效率低
Vector类似ArrayList,add方法用synchronized修饰,是线程安全的集合,但是开销大
LinkedList底层是双向链表结构,内部存储的Node节点,每个节点储存着前一个节点和后一个节点还有自身的地址,修改数据时只需要修改内部的指针指向,查找数据时要从第一个节点或最后一个
节点开始向后或者向前遍历,所以修改效率高,非头尾数据的查找效率低
HashSet是根据哈希表实现的,不保证存储顺序,只允许一个null值
TreeSet是基于二叉树实现的,保证存储数据处于排序状态,不允许null值
HashMap继承自AbstractMap,基于哈希表实现,底层通过数组加链表实现,数组初始容量16,扩容时直接是2倍,非线程安全,允许null键和null值,不保证数据顺序
HashTable继承自Dictionary,基于哈希表实现,底层通过数据加链表实现,数组初始容量11,扩容时直接是2倍+1,线程安全,不允许null键,不保证数据顺序
TreeMap继承自AbstractMap,基于红黑树实现,非线程安全,不允许null键,存入TreeMap的元素应该实现Comparable接口或者实现Comparator接口来保证顺序存储数据
原文:https://www.cnblogs.com/nanbcdx/p/11686454.html