【发布时间】:2017-09-29 06:47:54
【问题描述】:
我需要在 2 种对象之间建立一个映射,比如说,出于演示目的,String 和 Long。
我知道 HashMap 具有 O(1) 的搜索性能,这很棒。我正在使用这样的东西:
HashMap<String, Long> a = new HashMap<String, Long>();
当我想按键搜索时,这很有效。但是,现在我还需要按值查找键。
如果我开始迭代键,那么我将失去性能。
我想到的第一个选项是反过来创建另一个 HashMap。
HashMap<Long, String> reverseA = new HashMap<Long, String>();
每当我写一个,就写另一个。
难道没有一个特定的类能够通过键和值进行搜索,并且性能如此出色?
我应该使用两个 HashMap 创建自己的类吗?
还有其他解决方案吗?
【问题讨论】:
-
也许 Guava 的 BiMap 包含您要查找的内容。
-
当然,它们的键是唯一的,值可能不是这样
-
@ScaryWombat:好吧,如果
reverseA映射是一个选项,那么值最好是唯一的,否则会有一点不一致。 -
如果您不想使用第三个 API,为什么不使用没有开销的新 Streaming API 过滤地图,除非您进行终端调用?
-
为什么不使用 2 个 HashMap?这比仅针对这种情况向 Guava 添加新的依赖项要好。
标签: java collections hashmap