-
List
- ArrayList:
背后是一个动态数组,有序插入元素,可以根据下标取得对应元素,检索元素为线性查找,效率较低。当容量不足时会自动扩容,每次新建一个新的List,大小为原来的1.5倍,再将所有元素拷贝到新的List中去。 - LinkedList:
背后是一个链表结构,有序插入元素,可以根据下标取得对应元素, 检索时从头部或者尾部不断向下标靠拢,所以头部和尾部的查找效率高,中间低。
-
Set
- HashSet:
计算出元素的哈希值,哈希值相同的元素放在同一个哈希桶里,每个哈希桶里维护一个链表。插入的元素是无序的且不允许出现重复元素,查找效率高。但当发生哈希碰撞时,整个结构退化为链表会导致性能急剧下降。 - LinkedHashSet:
不同于HashSet,前面的数据结构为链表,所以是有序的,其他几乎一样。 - TreeSet:
前面的数据结构为二叉树,可以对插入的元素进行排序。检索快,时间复杂度降为对数级。
-
Map
- HashMap:
实质上和HashSet一样,不过可以存储键(Key)到值(Value)的映射。JDK1.8之后当链表节点大于7时会裂变为红黑树。 - TreeMap:
可以排序的HashMap。