Java映射---巩固强化

1.前言

集是一个集合,允许你快速地查找现有的元素。但是,要查找一个元素,需要有所要查找的那个元素的准确副本。这不是一种常见的查找方式。通常,我们知道某些关键信息,希望查找与之关联的元素。映射(Map)数据结构就是为此设计的。映射用来存放键/值对。如果提供了键,就能够查找到值。例如,可以存储一个员工记录表,其中键为员工ID,值为Employee对象。在下面的篇幅中,我们会学习如何使用映射。

2.基本映射操作

Java类库为映射提供了两个通用的实现:HashMap和TreeMap。这两个类都实现了Map接口。散列映射对键进行散列,树映射根据键的顺序将元素组织为一个搜索树。散列或比较函数值应用于键。与键关联的值不进行散列或比较。
应该选择散列映射还是树映射呢?与集一样,散列稍微快一些,如果不需要按照有序的顺序访问键,最好选择散列映射。
以下代码将建立一个散列映射来存储员工信息: 在这里插入图片描述
每当往映射里添加一个对象时,必须同时提供一个键。在这里,键是一个字符串,对应的值是Employee对象。要想检索一个对象,必须使用键(因而,必须记住键)。如果映射中没有存储与给定键对应的信息,get将返回null。如下图所示。 在这里插入图片描述
键必须是唯一的。不能对同一个键存放两个值。如果对同一个键调用两次put方法,第儿歌之就会取代第一个值。实际上,put将返回与这个键参数关联的上一个值。 在这里插入图片描述
remove方法从映射中删除给定键对应的元素。size方法返回映射中的元素数。要迭代处理映射的键和值,最容易的方法是使用forEach方法。可以提供一个接收键和值的lambda表达式。映射中的每一项会依序调用这个表达式。如下图所示。 在这里插入图片描述

3.映射视图

集合框架不认为映射本身是一个集合。不过可以得到映射的视图—这是实现了Collection接口或某个子接口的对象。有3种视图:键集、值集合(不是一个集)以及键/值对集。键和键/值对可以构成一个集,因为映射中一个键只能有一个副本。下面的方法:
Set< K > keySet()
Collection< V > values()
Set<Map.Entry<K,V>> entrySet()
会分别返回这3个视图。(映射条目集的元素是实现了Map.Entry接口的类的对象。)
需要说明的是,keySet不是HashSet或TreeSet,而是实现了Set接口的另外某个类的对象。Set接口扩展了Collection接口。因此可以像任何集合一样使用keySet。
例如,可以枚举一个映射的所有键或所有的值:
在这里插入图片描述
如果想同时查看键和值,可以通过枚举映射条目来避免查找值或使用forEach方法。示例如下: 在这里插入图片描述
不过,不能向键集视图中添加元素。另外,如果添加一个键而没有同时添加值也是没有意义的。如果视图调用add方法,它会抛出一个UnsupportedOperationException。映射条目集视图有同样的限制。

  • Set<Map.Entry<K,V>> entrySet()
    返回Map.Entry对象(映射中的键/值对)的一个集视图。可以从这个集中删除元素,它们将从映射中删除,但是不能添加任何元素。
  • Set< K > keySet()
    返回映射中所有键的一个集视图。可以从这个集中删除元素,键和相关联的值将从映射中删除,但是不能添加任何元素。
  • Collection< V > values()
    返回映射中所有值的一个集合视图。可以从这个集合中删除元素,所删除的值及相应的键将从映射中删除,不过不能添加任何元素。

猜你喜欢

转载自blog.csdn.net/Achenming1314/article/details/105820613