Java里的集合:List/Set/Map
首先对List/Set/Map进行说明:
1. 三者都是接口, List和Set继承至Collection接口,Map为独立的接口
2. List是无序的、Set是有序的。Map中既有有序的实现类也有无序的实现类。
一、List
1. 无序
2. List包含:ArrayList、LinkedList、Vector。
* ArrayList: 底层结构为数组、线程不安全
* LinkedList: 底层结构为链表、线程不安全
* Vector: 底层结构为数组、线程安全
3. 补充说明:
*数组实现:查询快,增加删除操作慢
* 链表实现:查询慢,增加删除操作快
二、Set
1. 有序
2. Set包含:HashSet、LinkedHashSet、TreeSet
* HashSet: 底层结构为哈希表
* LinkedHashSet: 底层结构为链表+哈希表 (FIFO)
* TreeSet: 底层结构为红黑树
3. 补充说明:
* 哈希表可以保证唯一性 (hashCode()和equals())
* 链表可以保证有序性
* 红黑树可以保证有序性和唯一性 (有序性:平衡二叉树;唯一性:compare(Object o)的返回值是否为0来判断) 参考来源
三、Map
1. TreeMap 有序、HashMap和HashTable无序
2. HashMap与HashTable的区别
* HashTable是同步的、线程安全,但是效率会慢
* HashMap是非同步的。线程不安全,效率较快
* HashTable不允许空值、HashMap允许空值
* HashTable的父类为Dictionary,HashMap的父类为AbstractMap
参考来源:
1. https://blog.csdn.net/zhangqunshuai/article/details/80660974
2. https://blog.csdn.net/dch9210/article/details/50951690