gpt4 book ai didi

Java列表实例在复制后保留其指针

转载 作者:行者123 更新时间:2023-12-02 08:27:47 27 4
gpt4 key购买 nike

我有以下 LinkHashMap,

LinkedHashMap<String, ArrayList<String>> test1=new ...

在一个循环中,我像这样分配键值对,

ArrayList<String> temp=new ...
//start iteration
temp.add("some strings")
test1.put("some string", temp);
temp.clear()//temp is cleared for next iteration

这里temp是我之前创建的临时列表,并向其中添加了一些内容。但问题是,当我清除 temp 时,传递给 test1temp 也被清除,这意味着它是通过引用复制的。我如何在 test1 中使用 temp 仍然保持其引用。我知道这是一个基本概念,但我对 java 很陌生,并没有了解它的所有功能。

最佳答案

那是因为你并没有真正复制 List , temp 。您正在复制指针(Java 术语中的“引用”)。

这里有两个简单的解决方案:

  1. 制作 List 的实际副本使用new ArrayList<String>(temp)就像您在 map 中存储的内容一样。
  2. 而不是做 temp.clear() ,做temp = new ArrayList<String>() .

第二个选项的性能最佳,因为它不会复制任何内容;它只是将引用替换为新的 ArrayList .

关于Java列表实例在复制后保留其指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12311101/

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