在下面的键/值列表中,“val3”对于不同的键重复。哪种地图最适合此类清单。
我希望“val3”只能存储一次,多个键指向它。
KEY1 ----> VAL1
KEY2 ----> VAL3
KEY3 ----> VAL3
KEY5 ----> val5
键6 ----> VAL3
KEY7 ----> VAL6
key8 ----> VAL3
key9 ----> VAL3
答案 0 :(得分:2)
任何Map
实施都可以。每个Java集合只保存引用,而不是实际对象,因此如果在地图中多次放置相同的对象,则所有值都将指向同一个对象。换句话说,在查找指向val3
的任何其他键时,将反映对key2
到val3
查找所做的更改。
考虑简化的例子:
VeryLarge v = new VeryLarge();
Map<Integer, VeryLarge> map = new HashMap<>();
map.put(1, v);
map.put(2, v);
map.put(3, v);
所有VeryLarge
,1
和2
密钥都会引用单个3
实例。
答案 1 :(得分:1)
只要您确保不通过clone
操作获取值,或者值不是不可变对象(除了String
文字或Integer.valueOf()
(从-128到127的值是缓存并从缓存返回)这些例外情况),你最终会得到多个指向相同引用的键。
所以你可以使用HashMap
,就像@Tomasz Nurkiewicz所建议的那样。