在下面的键/值列表中,“val3”针对不同的键重复。哪张地图最适合这种类型的列表。
我希望“val3”应该只存储一次,多个键指向它。
key1---->val1
key2---->val3
key3---->val3
key5---->val5
key6---->val3
key7---->val6
key8---->val3
key9 ---->val3
在下面的键/值列表中,“val3”针对不同的键重复。哪张地图最适合这种类型的列表。
我希望“val3”应该只存储一次,多个键指向它。
key1---->val1
key2---->val3
key3---->val3
key5---->val5
key6---->val3
key7---->val6
key8---->val3
key9 ---->val3
任何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
实例由 all和1
键引用。2
3
只要您确保您不会通过clone
操作获取值或值不是不可变对象(除了String
文字或Integer.valueOf()
(从-128 到 127 的值正在缓存并从缓存返回)这是异常),您将结束多个键指向相同的相关参考。
因此,您可以使用HashMap
例如@Tomasz Nurkiewicz 所建议的。