有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Java ArrayList如何在内部工作

在下面的代码中,我将list(在main中定义)传递给remove_dup方法,它更新了实际的arraylist(list)。既然Java是按值传递的,那么为什么列表会通过remove_dup方法更新呢

然后,我使用list创建了另一个list2,但如果我在list2中添加一个元素,它就不会被添加到list中

为什么一个更新主列表而另一个不更新

        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) 个答案

  1. # 1 楼答案

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

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

    这将创建列表的副本并将其保存到list2。list和list2是完全分开的ArrayList