你可以建议一种地图或类似的数据结构,我们可以同时获得彼此的价值和关键。也就是说,每个都可以用来找到其他的。双向映射
双向映射
回答
最常见的解决方案是使用两张地图。通过扩展AbstractMap
,您可以轻松地将它们封装在一个友好的界面中。 (更新:这是如何实现番石榴的HashBiMap
:两个地图)
使用什么,但使用数组和自定义类创建一个新的数据结构有几个优点。映射实现是索引键的数据结构的轻量级包装器。既然你需要两个索引,你可以使用两个完整的地图。
Java在其标准库中没有双向映射。
例如使用来自Google Guava的BiMap<K, V>
。
Google Guava包含BiMap
(双向映射)。
你应该更新链接指向Github我打算,但认为这可能是微不足道的,因为当前的链接工程目前。 – Travis 2015-04-22 18:12:28
在适当的时候。我知道Google代码处于只读模式。 – 2015-04-22 21:16:47
也试试Apache Commons Collections 4 BidiMap Package。
如果您感觉疼痛导入某些第三方库。 这个简单的课程如何?
public class BiMap<K,V> {
HashMap<K,V> map = new HashMap<K, V>();
HashMap<V,K> inversedMap = new HashMap<V, K>();
void put(K k, V v) {
map.put(k, v);
inversedMap.put(v, k);
}
V get(K k) {
return map.get(k);
}
K getKey(V v) {
return inversedMap.get(v);
}
}
确保K和V类具有正确的hashCode实现。
对于需要这样的字典的普通用例来说,我发现KISS解决方案没有什么错,只是把键和值反过来,节省了第二个地图甚至库的开销,目的:
myMap.put("apple", "Apfel");
myMap.put("Apfel", "apple");
请注意,这仅适用于键和值是相同类型的情况,并且您不会再知道哪一个是关键字,哪一个是有价值的。在某些情况下可以很好。 – Literallie 2016-09-21 11:53:02
- 1. 双向映射
- 2. 双向映射
- 3. PHP双向映射
- 4. AutoMapper双向映射
- 5. Python双向映射
- 6. 双向/反向映射
- 7. Java中的双向映射?
- 8. 杰克逊双向映射
- 9. 双向映射列表
- 10. 一对多双向映射
- 11. 双向多对一映射
- 12. 双向映射同步
- 13. hibernate @onetomany双向映射不能正确映射数据
- 14. 角双向绑定和映射在UI
- 15. Boost :: Bimap相当于双向多映射
- 16. 代码的双向NHibernate映射
- 17. Java中的双向多值映射
- 18. 总是逆映射双向关系?
- 19. 映射双向一对多Hibernate实体
- 20. 双向映射做对了吗?
- 21. 休眠注释双向映射
- 22. 双向协会和NHibernate映射
- 23. 休眠一对一映射双向
- 24. 休眠选择与双向映射
- 25. Automapper:使用ReverseMap()和ForMember()双向映射
- 26. 用休眠映射双向列表
- 27. 映射和序列化双向关联
- 28. 与单向映射和双向映射混淆在休眠弹簧
- 29. 正向映射vs反向映射
- 30. 以双射方式将向量映射为整数
你可以让你自己的类包含两个hasmaps,每个方向一个,并且并行管理它们。明显的缺点是存储空间和性能时间加倍。 – 2012-03-20 07:48:30
[java-hashmap-how-to-get-key-value-value](http://stackoverflow.com/questions/1383797/java-hashmap-how-to-get-key-from-value) – jaco0646 2014-03-22 16:44:41
看到这个简单的答案http://stackoverflow.com/a/39329515/5466401 – 2016-09-05 11:22:59