在下面的代码中,我将列表(在 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
的。
添加回答
举报
0/150
提交
取消