gpt4 book ai didi

java - HashMap内存分配不明确

转载 作者:行者123 更新时间:2023-12-01 13:36:42 24 4
gpt4 key购买 nike

根据android's developers site好像是这个方法

public V put (K key, V value)

将使用给定的值对象作为引用,而方法

public void putAll (Map<? extends K, ? extends V> map)

将把每个提供的 map 元素复制到一个新的值对象。
Android 源代码没有透露这些方法的内部原理。

我的理解正确吗?

最佳答案

putAll 只需迭代源 Map 的条目集并为每个 k-v 对调用 put (K key, V value) 。没什么特别的。因此它的行为与在 for 循环中多次调用 put 相同。

阅读下面的代码你就清楚了。

public void putAll(Map<? extends K, ? extends V> m) {
for (Map.Entry<? extends K, ? extends V> e : m.entrySet())
put(e.getKey(), e.getValue());
}

由OP编辑以完成答案:
此代码证明 put(key,value) 不会创建新对象,而是使用 value 参数,我刚刚测试了它并观察调试器中的变量:

    Map<String, Rect> mymap = new HashMap<String, Rect>();
Rect r1 = new Rect(0,120,200,155);
mymap.put("corner", r1);
r1.offset(20, 17);
Rect r2 = mymap.get("corner");

r1 变为 (20,137,220,172),返回值 r2 也变为 (20,137,220,172),证明引用被保留。

关于java - HashMap内存分配不明确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21217264/

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