使用哪个地图/收藏?

时间:2012-11-01 11:04:24

标签: java collections hash

在下面的键/值列表中,“val3”对于不同的键重复。哪种地图最适合此类清单。

我希望“val3”只能存储一次,多个键指向它。

KEY1 ----> VAL1
KEY2 ----> VAL3
KEY3 ----> VAL3
KEY5 ----> val5
键6 ----> VAL3
KEY7 ----> VAL6
key8 ----> VAL3
key9 ----> VAL3

2 个答案:

答案 0 :(得分:2)

任何Map实施都可以。每个Java集合只保存引用,而不是实际对象,因此如果在地图中多次放置相同的对象,则所有值都将指向同一个对象。换句话说,在查找指向val3的任何其他键时,将反映对key2val3查找所做的更改。

考虑简化的例子:

VeryLarge v = new VeryLarge();
Map<Integer, VeryLarge> map = new HashMap<>();
map.put(1, v);
map.put(2, v);
map.put(3, v);

所有VeryLarge12密钥都会引用单个3实例。

答案 1 :(得分:1)

只要您确保不通过clone操作获取值,或者值不是不可变对象(除了String文字或Integer.valueOf()(从-128到127的值是缓存并从缓存返回)这些例外情况),你最终会得到多个指向相同引用的键。

所以你可以使用HashMap,就像@Tomasz Nurkiewicz所建议的那样。