【Java】Java容器类(四),深入理解Map集合类
【Java】Java容器类(四),深入理解Map集合类
建议整个系列一起看(更新中):
增强for: https://blog.****.net/qq_45495857/article/details/109410980
泛型:https://blog.****.net/qq_45495857/article/details/109410912
Java容器篇(一),宏观了解:https://blog.****.net/qq_45495857/article/details/109524162
Java容器篇(二),深入理解List集合类: https://blog.****.net/qq_45495857/article/details/109529618
Java容器类(三),深入理解Set集合类: https://blog.****.net/qq_45495857/article/details/109536611
Java容器类(四),深入理解Map集合类https://blog.****.net/qq_45495857/article/details/109542428
Java容器类(五),深入理解迭代器: https://blog.****.net/qq_45495857/article/details/109548598
Map接口
特点:
- 是双列集合的 顶层,和Collection属于同级
- 存储方式是key-value(键值对)方式,即一个键对应一个值
- 一个键只能映射一个值
- 键不能重复,值可以重复
- 键是无序的
Map和Collection的区别:
- Map是双列集合,用于处理有一一对应关系的数据,键不能重复且键无序
- Collection是单列集合,有不同的子体系,List允许重复且有序,Set允许不 重复且无序
HashMap
HashMap基于散列表的实现(它取代了HashTable)
插入和查询“键值对”的开销是固定的。
可以通过构造器设置容量和负载因子,以调整容器的性能
HashMap的性能因子:
- 容器:表中的桶位数
- 初始容量:表在创建时所拥有的桶位数。HashMap和HashSet都具有允许你指定初始容量的构造器
- 尺寸:表中当前存储的项数
- 负载因子:尺寸/容量,
空表的负载因子是0
,而半满表 的负载因子是0.5
,以此类推,负载轻的表产生冲突的可能性小 ,因此对于插入和查找都是最理想的(但是会减慢使用迭代器进行遍历的过程),HashMap和HashSet都具有允许你指定负载因子的构造器
,表示当负载情况达到该负载因子的水平时,容器将自动增加其容量(桶位数),实现方式是使容量大致加倍,并重新将现有对象分布到新的通位集中(这被称为再散列)
HashMap使用的默认负载因子是0.75
(只有当表达到四分之三满时,才进行再散列)
如果你知道将要在HashMap中存储多少项,那么创建一个具有恰当大小的初始容器可以避免自动再散列的开销
JDK8中,HashMap在存储一个元素时,当对应链表长度大于8时,链表就转换为红黑树,这样又大大提高了查找的效率。
常用方法:
-
增和改:
V put(K key,V value):添加键值对,如果key已经存在,则会使用新的value覆盖原有的value,并将原有value返回 -
删
void clear():清空集合
V remove(Object key):删除指定键的值(key和 value都会删除) -
查
V get(Object key):通过指定键获取值
int size():获取集合长度 -
判断
boolean containsKey(Object key);是否包含指定的键
boolean containsValue(Object value):是否包含指定的值
boolean isEmpty():是否为空 -
遍历
Set<Map.Entry<K,V> > enrty 获取键值对的Set集合
Set<K> keySet(): 获取所有键的Set集合
Collection<V> values():获取所有值得Collection集合
TreeMap
基于红黑树
的实现。查看 “键” 或 “键值对”时,他们会被排序(次序由 Comparable 或 Comparator决定
)。TreeMap的特点在于:所得到的结果是经过排序的,TreeMap是唯一的带有SubMap()方法的Map,它可以返回一个子树
对象排序的方法在前面一掌Set集合TreeSet的讲解中已经提出,本篇不再重复讲解,有不懂的小伙伴可以去看一下
特有方法:
- Comparator comparator():返回当前Map使用的Comparator;或者返回null,表示以自然方式排序
- T firstKey()返回Map中的第一键。
- T lastKey()返回Map中最后一个键
- SortedMap subMap(fromKey,toKey)生成此Map的子集,范围由fromKey(包含)到toKey(不包含)的键确定
- SortedMap headMap(toKey)生成此 Map的子集,由键小于toKey的所有键值对组成。
- SortedMap tailMap(fromKey) 生成此Map的子集,由键大于或等于fromKey的所有键值对组成
其他不常用Map集合类,将不再讲解,类似集合请看前几篇 讲解。
//以上就是本篇Map集合类的讲解,希望能够帮助到大家????