List、Set、Map集合的区别
List集合:
存放有序可重复的元素,可以存null。
主要实现类有:(以下三个均继承自AbstractList)
ArrayList:
内部采用数组存储元素,访问速度快。非线程安全。采用倍数增长方式扩容,数组的50%增长,也就是1.5倍。
LinkedList:
内部采用链表存储元素,增删速度快。非线程安全。链表实现不需要扩容,
Vector:
内部采用数组存储元素。效率不高,线程安全。采用倍数增长方式扩容,数组的100%增长,也就是2倍。
Set集合:
存放无序不可重复的元素,只允许有一个null。
主要实现类有:
HashSet:
是哈希表实现。非线程安全。
TreeSet:
二叉树实现。非线程安全。
Map集合:
map集合使用键(key)值(value)来保存数据,其中值(value)可以重复,但键(key)必须是唯一,也可以为null,但最多只能有一个key为null。
主要实现类:
Hashtable:
继承自Dictionary。键和值都不允许存null。线程安全,理论上效率较低。容量:初始值11,负载因子0.75。扩容:2倍+1。内部采用数组+链表实现。
HashMap:
继承自AbstractMap。允许null。非线程安全。容量:初始值16,负载因子0.75。扩容2倍。内部采用数组+链表+红黑树方式存储。当链表长度大于8时会自动转换成红黑树,当链表长度小于6时,红黑树重新转换成链表。

浙公网安备 33010602011771号