Java - 更新 HashMap 值的最佳方式 - 按值/引用传递相关

标签 java collections hashmap pass-by-reference pass-by-value

我有一个包含一些数据的 HashMap。查看以下代码...

HashMap<String, Double[]> map; //Already populated with data

Double[] results = map.get(key);
updateArray(results); //This function makes changes to the results array.
map.put(key, results);

...我的问题是 map.put(key, results) 是否必要?

我对 Java 的按值传递和按引用传递的性质仍然有些困惑。需要明确的是,在第一行代码中,我们获得了对 Double 数组的引用,对吗?因此,第二行的函数应该正确地更新 HashMap 中的 Double 数组……这似乎会使第三行的 map.put() 变得多余。

看别人的HashMap相关代码,好像都是用put()方法。我只是想确保在没有 put() 方法的情况下不会出现任何不可预见的后果。

感谢任何输入!

最佳答案

Map.get(Object) 只是返回对所述数组的引用,它不会将数组的内容复制到新数组。因此,您对 Map.get(Object) 返回的数组所做的任何更改都将反射(reflect)在存储在 Map 中的数组中,因为它们是相同的数组。因此,在这种情况下调用 Map.put(Object,Object) 完全多余。

关于Java - 更新 HashMap 值的最佳方式 - 按值/引用传递相关,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25408120/

相关文章:

java - 为什么要为抽象类或接口(interface)类烦恼呢?

c - 是否可以将这种无锁的 32 位哈希表算法用于 64 位 key ?

Scala 以列表为键,以字符串为值展平 map

java - 具有单独收集功能的流过滤器

java - 在java中将Hashmap转换为单个字符串数组

java - 更新 JSONObject 时发生并发修改异常

java - 使用 intellij IDEA 从 Selenium + JUnit 生成 ANT 结果报告

java - 静态如何操作?

c# - Java包无法编译,但该包中的某些类可以被其他项目使用

c++ - 为什么 QList 不是从 QObject 派生的?