Java集合之 Java 8 增强的 Map 类

Map 用于保存具有映射关系的数据,因为 Map 集合里保存着两组值,一组用于保存 key,一组保存 value,key 和 value 可以是任何引用类型的数据,其中 key 不允许重复。

key 和 value 直接存在单向一对一关系,即通过指定的key ,可以找到唯一的 value。
Map 中的所有 key 放在一起,可以认为组成了一个 Set 集合(所有的 key 没有顺序,key 与 key 之间不能重复),实际上 Map 确实包含了一个 keySet() 方法,用于返回 Map 里所有 key 组成的 Set 集合。

Map 和 Set 是非常类似的:
在这里插入图片描述
在这里插入图片描述
把 Map 的所有value 放在一起看,它们又非常类似于一个 List ;元素之间可以重复,每个元素可以根据索引来查找,只是 Map 中的索引不是整数值,而是使用另一个对象作为索引,如果需要从 Map 中取出元素,则需要提供对应的 key 索引。
Map 接口提供了如下常用方法:
在这里插入图片描述
在这里插入图片描述
Map 接口提供了大量的实现类,典型实现如 HashMap 和 Hashtable 等、HashMap 的子类 LinkedHashMap,还有 SortedMap 子接口及该接口的实现类 TreeMap ,以及 WeakHashMap、IdentityHashMap 等。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
本文包含:

  1. java 8 为 Map 新增的方法
  2. Java 8改进的 HashMap 和 Hashtable 实现类
  3. LinkedHashMap 实现类
  4. 使用 Properties 读写属性文件
  5. SortedMap 接口和 TreeMap 实现类
  6. WeakHashMap 实现类
  7. IdentityHashMap 实现类
  8. EnumMap 实现类
  9. 各 Map 实现类的性能分析

1. Java 8 为 Map 新增的方法

Java 8 除了为 Map 增加了 remove(Object key,Object value)默认方法外,还增加了如下方法:
在这里插入图片描述
在这里插入图片描述

2. Java 8 改进的 HashMap 和 Hashtable 实现类

Hashtable 和 HashMap 的区别:
在这里插入图片描述
HashMap 中可以放入 null 元素。
在这里插入图片描述
下面程序示范了 Hashtable 判断两个 key 相等的标准和两个 value 相等的标准。
在这里插入图片描述在这里插入图片描述
上面程序
当使用
与 HashSet 类似的是,如果使用可变对象作为 HashMap 、Hashtable 的 key ,并且程序修改了作为 key 的可变对象,则也可能出现与 HashSet 类似的情形:程序再也不能访问到 Map 中被修改过的 key。
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
与 HashSet 类似的是,尽量不要使用可变对象作为 HashMap、Hashtable 的 key,如果确实需要使用可变对象作为 HashMap、Hashtable 的 key,则尽量不要在程序中修改作为 key 的可变对象。

3. LinkedHashMap 实现类

LinkedHashMap 使用双向链表来维护 key-value 对的次序(其次只需要考虑可以key 的次序),该链表负责维护 Map 的迭代顺序,迭代顺序与 key-value 对的插入顺序保持一致。

LinkedHashMap 可以避免对HashMap、Hashtable 里的key-table 对进行排序(只要插入key-value 对时保持顺序即可),同时又可避免使用TreeMap 所增加的成本。

LinkedHashMap 需要维护元素的插入顺序,因此性能略低于 HashMap 的性能;但因为它以链表来维护内部顺序,所以在迭代访问 Map 里的全部元素将会有良好的性能,下面程程序示范了LinkedHashMap 的功能:迭代输出 LinkedHashMap 的元素时,将会按添加key-value 对的顺序输出。
在这里插入图片描述
上面程序中最后一行代码使用 Java 8 为 Map 新增的 forEach() 方法来遍历 Map 遍历。编译、运行上面程序,即可以看到 LinkedHashMap 可以记住 key-value 对的添加顺序。

4. 使用 Properties 读写属性文件

在这里插入图片描述
Propertie 相当于一个key 、 value 都是 String 类型的 Map。
在这里插入图片描述在这里插入图片描述
上面两个方法中使用了 InputStream 类和 OutputStream 类,它们是 Java IO 体系中的两个基类
在这里插入图片描述在这里插入图片描述

5. SortedMap 接口和 TreeMap 实现类

Map 接口派生出了 SortedMap 子接口,SortedMap 接口也有一个 TreeMap 实现类。
TreeMap 就是一个红黑树数据结构,每个 key-value 对即作为红黑树的一个节点。TreeMap 可以保证所有的 key-value 对处于排序状态。
TreeMap 具有两种排序方式:
在这里插入图片描述在这里插入图片描述
注意:
在这里插入图片描述
TreeMap 中也提供了一系列根据 key 顺序访问 key-value 对的方法:
在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值