0

在下面的键/值列表中,“val3”针对不同的键重复。哪张地图最适合这种类型的列表。

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

key1---->val1
key2---->val3
key3---->val3
key5---->val5
key6---->val3
key7---->val6
key8---->val3
key9 ---->val3

4

2 回答 2

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实例由 all和1键引用。23

于 2012-11-01T11:07:31.150 回答
1

只要您确保您不会通过clone操作获取值或值不是不可变对象(除了String文字或Integer.valueOf()(从-128 到 127 的值正在缓存并从缓存返回)这是异常),您将结束多个键指向相同的相关参考。

因此,您可以使用HashMap例如@Tomasz Nurkiewicz 所建议的。

于 2012-11-01T11:20:35.870 回答