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时,红黑树重新转换成链表。

posted @ 2020-09-25 09:54  小陈dcyy  阅读(108)  评论(0)    收藏  举报