1.概述

在这简短的文章中,我们将在Apache Commons Collections Library中查看一个有趣的数据结构 -BidiMap

BidiMap增加了使用标准上的对应值查找键的可能性地图接口。

2.依赖关系

我们需要在项目中包含以下依赖项以便使用BidiMap和它的实现。对于基于Maven的项目,我们必须将以下依赖项添加到pom.xml

 common -collections s4 4.1 

对于基于gradle的项目,我们必须将相同的工件添加到build.gradle.文件:

编译“org.apache.commons: commons-collections4:4.1”

可以找到此依赖项的最新版本在Maven Central.

3.实现和实例化

BidiMap它本身只是一个定义双向映射特有行为的接口——当然还有多种可用的实现。

理解这种实现很重要BidiMap不允许键和值重复.当一个BidiMap,则任何重复的值将被转换为重复的键,并将违反映射契约。映射必须始终具有唯一的键。

让我们看看这个接口的不同具体实施方式:

  • DualHashBidiMap:这个实现使用两个HashMap实例在内部实现BidiMap它可以使用条目的键或值快速查找条目。然而,有两个例子HashMap需要进行维护
  • DualLinkedHashBidiMap:这个实现使用了两个LinkedHashMap实例,从而维护映射项的插入顺序。如果我们不需要维护映射条目的插入顺序,我们可以使用开销较小的DualHashBidiMap
  • TreeBidiMap:这个实现是有效的,并且是由一个红黑树实现来实现的。的键和值treebidimap.是否保证按键和值的自然顺序升序排序
  • 还有dualtreebidimap.它使用了两个实例TreeMap达到同样的目的treebidimap.dualtreebidimap.显然比贵重treebidimap.

BidiMap接口扩展了java.util.Map接口,所以可以作为它的替代品。我们可以使用具体实现的无参数构造函数来实例化具体对象实例

4.独特的BidiMap方法

现在我们已经研究了不同的实现,让我们看看接口特有的方法。

put ()在映射中插入一个新的键值条目.注意,如果新条目的值与任何现有条目的值匹配,那么现有条目将被删除,以有利于新条目。

方法返回已删除的旧条目或如果没有:

 map = new DualHashBidiMap<>();地图。put (" key1”、“value1”);地图。put (" key2”、“value2”);assertequal (map.size (), 2);

inverseBidiMap ()逆转键值对BidiMap。此方法返回一个newBidiMap键变成了值,反之亦然。这个操作在翻译和字典应用中非常有用:

 rMap = map.inverseBidiMap();assertTrue (rMap.containsKey(“value1”)& & rMap.containsKey (value2 "));

removeValue ()用于指定值而不是键来删除映射条目.这是一个加法地图可在java.util包:

map.removeValue(“value2”);assertfalse(map.containskey(“key2”));

我们可以将键映射到BidiMapgetKey()。该方法返回如果没有键映射到指定的值:

assertequal (map.getKey(“value1”)、“key1”);

5.结论

此快速教程提供了查看Apache Commons Collections Library - 特别是在BidiMap,其实现和特殊方法。

最令人兴奋和最显著的特征BidiMap是通过键和值查找和操作条目的能力。

和往常一样,代码片段是可用的在github上

下一个»
Apache Commons Collections CollectionUtils指南
«以前的
Apache Commons Collections OrderedMap
通用的底部

开始使用Spring 5和Spring Boot 2,通过学习的春天课程:

>>看看这个课程
评论在本文上关闭!