概述
- 集合包含两种容器结构:Collection,Map。
- Collection下面有Set,List,Queue三种接口。
- Set下面有HashSet,LinkedHashSet,TreeSet。
- List下面主要有ArrayList,LinkedList,Vector。
- Queue下面有PriorityQueue。
- Map下面有HashMap,TreeMap,HashTable,LinkedHashMap。
- Collection继承了Iterable接口,因此Collection下的实现类都可以通过迭代器方式访问,使用了迭代器模式,实现了数据访问和数据结构分离。
数据结构概述
ArrayXxx:底层数据结构是数组,查询快,增删慢。
LinkedXxx:底层数据结构是链表,查询慢,增删快。
HashXxx:底层数据结构是哈希表,依赖key对象的两个方法:hashCode()和equals()。
TreeXxx:底层数据结构是红黑树,两种方式排序:自然排序和比较器排序。
Collection
- 总体类图
- 公共方法
List
有序、可重复
- ArrayList
- 底层数据结构是数组,查询快,增删慢。
- 线程不安全,效率高。
- LinkedList
- 底层使用双向链表,查询慢,增删快。
- 线程不安全,效率高。
- Vector
- 底层使用数组,查询快,增删慢。
- 线程安全,效率低。
特有方法
Set
无序,元素唯一
- HashSet
- 底层数据结构HashMap,无序,唯一。
- 依靠HashCode()和equals()两个方法来保证元素唯一性。
- LinkedHashSet
- 底层数据结构是双向链表和HashMap,其实就是通过LinkedHashMap实现。
- 有序,先进先出,唯一。
- 由链表保证了插入元素有序。
- 由哈希表保证了元素的唯一性。
- TreeSet
- 底层数据结构是TreeMap红黑树,唯一,有序。
- 有序:自然排序和比较器排序。
- 通过TreeMap中的Key唯一性来保证唯一。
Queue
FIFO,实现队列的特性,先进先出,有序可重复。
使用场景
用到的设计模式
- 迭代器模式
Collection中的实现类都实现了迭代器模式,使数据访问和数据结构解耦。 - 适配器模式
List列表就是典型的适配器模式,把数组和双向链表的操作适配成List相关的接口。
Map
- 总体类图
- 通过散列实现Map,任意输入映射成一个固定长度的hash值,如果hash冲突放入数组中的链表或者红黑树中。
- Map 提供 key 到 value 的映射,你可以通过“键”查找“值”。一个 Map 中不能包含相同的 key ,每个 key 只能映射一个 value 。 Map 接口提供 3 种集合的视图, Map 的内容可以被当作一组 key 集合,一组 value 集合,或者一组 key-value 映射。
- 通用方法
HashMap
无序,key唯一,value可重复。
- 底层数据结构
- 数组,单向链表,红黑树。
- 要求添加的键类明确定义了hashCode()和equals()[可以重写hashCode()和equals()],为了优化HashMap空间的使用,可以调优初始容量和负载因子。
- 当某个链表中数据超过8个,同时数组容量超过64,链表变成红黑树,否则扩容数组。
- 数组每次扩容两倍,数组容量是2的次方。
- 红黑树变成链表:???
- 不是线程安全的,效率高。
LinkedHashMap
有序,key唯一,value可重复。
- 底层数据结构
- 双向链表,数组,单向链表,红黑树。
- 通过link链表来保证数据插入的有序性。
- 非线程安全,效率高。
TreeMap
有序,key唯一,value可重复。
- 底层数据结构:红黑树。
- 有序:自然排序,比较器排序。
- 非线程安全,效率高。
- 常用方法
HashTable
无序,key唯一,value可重复。
- 底层数据结构:数组,单向链表。
- 线程安全的,效率低。
集合比较
TreeSet,LinkedHashSet,HashSet
概述
TreeSet主要用于排序,排名之类的场景。
LinkedHashSet主要用于保证FIFO,即先进先出的唯一元素的集合。
HashSet主要用于存储唯一元素的集合。
- 不同点
- HashSet不保证有序
- linkedHashSet保证FIFO插入顺序
- TreeSet按照内部实现排序,也可以自定义比较器排序规则
- HashSet和LinkedHashSet允许存在null数据,但是TreeSet中插入null数据会报NullPointerExecption
HashMap与HashTable
集合工具
Arrays
Collections
参考
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/100388.html