9.4 映射(map)
通用实现HashMap和TreeMap。
HashMap(散列映射)对键进行hash,但无排序。
TreeMap(树映射)将键排序组织成搜索树。
put和get操作,get不存在则返回null,可用getOrDefault设置默认值。
键必须唯一,remove删除给定键的元素,size返回元素个数,迭代可以用foreach或lambda表达式(k,v)->{......}
9.4.2 更新映射条目(Entry)
- 正常put
- get或getOrDefault
- 存在则设置putIfAbsent
- merge(word,1,Integer::sum)
9.4.3 映射视图(view)
3种视图:
键集:Set keySet()
值集:Collection values()
映射条目集:Set> entrySet()
- entrySet中,迭代器remove删除的是值
- 不能在entrySet中add,不允许
9.4.4 弱散列映射WeakHashMap
如果键不再使用,垃圾回收器无法工作回收。
WeakHashMap用弱引用(weak referencs)保存键
9.4.5 链接散列集与映射
LinkedHashSet和LinkedHashMap会记住插入元素项的顺序。
可以将访问频率高的元素放入内存中,满了删除最老的元素。
9.4.6 枚举集与映射
EnumSet,枚举元素集,枚举类有限个实例,内部用位表示。
值在集中相应位置为1.
EnumMap是键类型为枚举类型的映射。
9.4.7 标识散列映射
IdentityHashMap,计算键不用hashCode,用系统的System.identityHashCode,两对象比较用==,不用equals,
键对象内容相同,视为不同,对遍历算法有用。