在下面的代碼中,我將列表(在 main 中定義)傳遞給 remove_dup 方法,它更新了實際的數(shù)組列表(列表)。由于 Java 是按值傳遞,那么為什么列表由 remove_dup 方法更新。然后我使用列表創(chuàng)建了另一個 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條經(jīng)驗 獲得超8個贊
如果您將一個傳遞ArrayList
給函數(shù),它會將一個指針傳遞回原始列表。這意味著該方法中的任何更新都將更新您的原始內(nèi)容ArrayList
,因為它們是相同的。
ArrayList<String> list2 = new ArrayList<String>(list);
這會制作 list 的副本并將其保存到list2
. 列出并且list2
是完全獨立ArrayList
的。
添加回答
舉報
0/150
提交
取消