你可以建議一種地圖或類似的數據結構,我們可以同時獲得彼此的價值和關鍵。也就是說,每個都可以用來找到其他的。雙向映射
雙向映射
回答
最常見的解決方案是使用兩張地圖。通過擴展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