Java基础学习

Java基础——Map集合、Java9中的不可变集合

2019-10-18  本文已影响0人  So_ProbuING

Map集合概述

Map用于保存具有映射关系的数据,Map中保存着两组值,一组用于保存map中的key一组用于保存Map中的value
Map的Key不允许重复,key和value之间存在单向一对一关系。

Map集合API

Java8 为Map新增的方法

Java8改进的HashMap和Hashtable

Hashtable是一个线程安全的Map实现,但是HashMap是线程不安全的实现
Hashtable中不允许使用Null最为key和value
HashMap里的key不能重复,所以HashMap里最多只有一个key-value对的key为null但可以有无数多个key-value对的value为null

在HashMap、Hashtable中存储获取对象,用作key的对象必须实现hashCode()方法和equals()方法

HashMap、Hashtable不能保证其中key-value对的顺序。判断两个key相等的标准是:两个key通过equals()比较返回true,两个key的hashCode值也相等

LinkedHashMap 实现类

LinkedHashMap使用双向链表来维护key-value对的次序,迭代顺序与key-value对的插入顺序保持一致。
LinkedHashMap需要维护元素的插入顺序,因此性能略低于HashMap的性能,因为以链表来维护内部顺序,所以在迭代访问Map里的全部元素时将有较好的性能。

SortedMap接口和TreeMap实现类

想让TreeMap良好地工作,则需要重写该类的equals()方法和compareTo()方法时应保持一致的返回结果:也就是说当两个key通过equals()方法比较返回true时,它们通过compareTo()方法比较应该返回0

TreeMap API

TreeMap通常比HashMap、Hashtable要慢,因为TreeMap底层采用红黑树来管理key-value底层采用红黑树来管理key-value对

TreeMap中的key-value总是处于有序状态

WeakHashMap 实现类

WeakHashMap的key的只保留了对实际对象的弱引用,如果WeakHashMap对象的Key所引用的对象没有被其他强引用变量所引用,这意味着如果WeakHashMap对象的key所引用的对象没有被其他强引用变量所引用,则这些key所引用的对象可能被垃圾回收,WeakHashMap也可能自动删除这些key所对应的key-value对。

IdentityHashMap实现类

在IdentityHashMap,当且仅当两个key严格相等(key1==key2)时,IdentityHashMap才认为两个key相等,这种对于普通的HashMap而言,只有key1和key2通过equals()方法比较返回true,且它们的hashCode值需要相等

各Map实现类的性能

TreeMap通常比HashMap、Hashtable要慢,因为TreeMap底层采用红黑树来管理key-value对使用
对于一般场景,程序应考虑使用HashMap,HashMap是为了快速查询而设计的
如果程序需要一个总是排好序的Map则可以考虑使用TreeMap

Java9中新增的不可变集合

Java9中可以直接调用Set、List、Map的of()方法即可创建包含N个元素的不可变集合。
这样的不可变集合不能向集合中添加元素,也不能从集合中删除元素

Set set = Set of(1,2,3,4) //Set不可变集合
List list = List.of(1,2,3,4)//List不可变集合
Map map = Map.of("key1",1,"key2",2)//Map不可变集合
上一篇 下一篇

猜你喜欢

热点阅读