为了账号安全,请及时绑定邮箱和手机立即绑定

Java ArrayList 如何在内部工作

Java ArrayList 如何在内部工作

梵蒂冈之花 2022-05-21 17:21:36
在下面的代码中,我将列表(在 main 中定义)传递给 remove_dup 方法,它更新了实际的数组列表(列表)。由于 Java 是按值传递,那么为什么列表由 remove_dup 方法更新。然后我使用列表创建了另一个 list2,但是如果我在 list2 中添加一个元素,它不会被添加到列表中。为什么要更新主列表而其他方法不更新?        public class ArrayListTest {            public static void remove_dups(ArrayList<String> list, int n) {                Set<String> unqList = new TreeSet<String>(list);                list.clear();                list.addAll(unqList);            }            public static void main(String[] args) {                ArrayList<String> list = new ArrayList<String>();                list.add("one");                list.add("two");                list.add("two");                remove_dups(list);        //As Java is pass by value then why its printing unique values here?  //expected output---- One two two but its printing one two                for (String string : list) {                    System.out.println(string);                }                ArrayList<String> list2 = new ArrayList<String>(list);                list2.add("three");                for (String string : list2) {                    System.out.println("list 2-" + string);                }    //I was expecting "three to be printed with list"                 for (String string : list) {                    System.out.println("list 1-" + string);                }            }        }
查看完整描述

1 回答

?
精慕HU

TA贡献1845条经验 获得超8个赞

如果您将一个传递ArrayList给函数,它会将一个指针传递回原始列表。这意味着该方法中的任何更新都将更新您的原始内容ArrayList,因为它们是相同的。

ArrayList<String> list2 = new ArrayList<String>(list);

这会制作 list 的副本并将其保存到list2. 列出并且list2是完全独立ArrayList的。


查看完整回答
反对 回复 2022-05-21
  • 1 回答
  • 0 关注
  • 67 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信