gpt4 book ai didi

java - 当通过 Map.put(K, V) 添加一个值时,必须通过 Map.get(K) 返回相同的实例吗?

转载 作者:搜寻专家 更新时间:2023-10-31 19:35:49 24 4
gpt4 key购买 nike

假设你有这样的代码:

Map<Foo, Bar> map = new HashMap<Foo, Bar>();

Foo foo = new Foo();
Bar bar = new Bar();
map.put(foo, bar);

Bar barReturned = map.get(foo);

Java 是否要求 barReturned == bar?也就是说,Java 要求 barReturnedbar同一个实例吗?如果不是,预期的语义是什么?

Javadoc建议 barReturned == bar 必须为真,但我不是 100% 确定:

V get(Object key)

Returns the value to which the specified key is mapped, or null if this map contains no mapping for the key.

More formally, if this map contains a mapping from a key k to a value v such that (key==null ? k==null : key.equals(k)), then this method returns v; otherwise it returns null. (There can be at most one such mapping.)

If this map permits null values, then a return value of null does not necessarily indicate that the map contains no mapping for the key; it's also possible that the map explicitly maps the key to null. The containsKey operation may be used to distinguish these two cases.

Parameters:

key - the key whose associated value is to be returned

Returns:

THE VALUE TO WHICH THE SPECIFIED KEY IS MAPPED, or null if this map contains no mapping for the key

(强调我的)

编辑:我了解与标准库捆绑在一起的 Map 实现遵循 barReturned == bar 语义。我想知道的是,根据文档,此行为是否必需。例如,如果我编写自己的实现 Map 的类,我是否也必须遵守这些语义?

最佳答案

如果你问是否可以打破这种关系,我认为答案是"is"。例如,如果您正在实现一个充当持久缓存的 Map,如果一段时间不使用,可能会将特定值写入磁盘,然后重新加载。在那种情况下你不会有引用平等,但没关系。显然,您可能想要记录与标准行为的任何偏差,但我认为这不超出合理使用 Map 的范围。

关于java - 当通过 Map.put(K, V) 添加一个值时,必须通过 Map.get(K) 返回相同的实例吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5028962/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com