聊聊List , Set ,Map的关系
结构图
Collection
List
Vector
Vector 继承 AbstractList 类,间接实现自 List 接口
ArrayList
ArrayList 继承 AbstractList 类,实现了List接口
LinkedlList
LinkedlList 继承 AbstractSequentialList 类,实现了 List 接口
Set
HashSet
HashSet 继承 AbstractSet 类,实现了 Set接口
TreeSet
TreeSet 继承 AbstractSet 类,间接实现 Set接口
Map
HashMap
HashMap 继承 AbstractMap类,实现 Map接口
Hashtable
Hashtable继承 Dictionary类,实现 Map接口
ConcurrentHahsMap
Hashtable继承 AbstractMap类,间接实现了 Map接口
总结
-
List接口:存储有序的、可重复的数据 ---->"动态"数组
-
ArrayList:作为List的主要实现类;线程不安全的,效率高;底层使用数组实 -
LinkedList:对于频繁的插入、删除操作,我们建议使用此类,因为效率高;底层使用双向链表实现 -
Vector:List的古老实现类;线程安全的,效率低;底层使用数组实现 -
Set接口 :相对无序存储,不可以存储相同的元素(排重),不能通过下标访问
- HashSet特点:相对无序存储,不可以存储相同元素(排重),通过哈希表实现的集合
- LinkedHashSet特点: 相对有序存储,不可以存储相同元素(排重),通过链表实现的集合
- TreeSet特点:唯一有序,实现了SortedSet接口,自动排序
-
Map接口:元素是成对存在的(理解为夫妻)。每个元素由键与值两部分组成,通过键可以找对所对应的值。
-
HashMap是线程不安全的,效率高,HashMap可以存储null键和null值 -
Hashtable是线程安全的,效率低,Hashtable不可以存储null键和null值 -
ConcurrentHashMap 采用了分段锁技术,不会像 HashTable 那样不管是 put 还是 get 操作都需要做同步处理, 好处就是线程安全的同时提高效率 ConcurrentHashMap 采用了分段锁技术,不会像 HashTable 那样不管是 put 还是 get 操作都需要做同步处理, 好处就是线程安全的同时提高效率
|