gpt4 book ai didi

java - 了解 map 获取方法

转载 作者:塔克拉玛干 更新时间:2023-11-01 23:09:10 25 4
gpt4 key购买 nike

阅读 Map#get(Object key) 的 JavaDocs|我不太明白这些方法实际上返回了什么。 The quote

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

返回值是什么意思?它可能是作为映射对象的副本创建的新对象吗?我编写了以下简单程序:

public static void main (String[] args) throws java.lang.Exception
{
Map<Integer, MyClass> m = new HashMap<>();
m.put(1, new MyClass());
MyClass mc = m.get(1);
mc.i = 15;
System.out.println(m.get(1).i); //prints 15
}

private static class MyClass{
public int i = 10;
}

DEMO

通过更改 get(Object key) 返回的对象的状态是否可靠?我更改了实际的映射对象,或者它是一个特定的实现和 Map 的任意实现。不应该拿着吗?

最佳答案

简短的回答,是的。

map 保留对添加到其中的对象的引用。因此,当您调用 get 时,您将获得对原始对象的引用,并且所做的任何更改都是永久性的。

文档状态 [1]:注意:如果将可变对象用作映射键,则必须格外小心。如果对象的值以影响等于比较的方式更改,而对象是映射中的键,则未指定映射的行为。此禁令的一个特例是 map 不允许将自身包含为键。虽然允许映射将自身包含为值,但建议格外小心:在此类映射上不再明确定义 equals 和 hashCode 方法。

因此,即使他们注意到您可以更改映射对象,但如果在更改影响 equals 返回值的字段时用作键,则应牢记某些事项。

[1] http://docs.oracle.com/javase/7/docs/api/java/util/Map.html

关于java - 了解 map 获取方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33866131/

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