Java ArrayList clear()方法

Java ArrayList clear()方法,java,arraylist,Java,Arraylist,我不能真正理解下面的代码。 “清除”方法将删除指定给“al”的所有元素,对吗?然后ArrayList al接收字符串Str2的值,alal接收字符串Str3的值 那么,如果alal只分配了Str3,那么输出结果到底是怎样的呢?有人能解释一下吗?非常感谢 输出: [字符串2] [[String 2],String 3] public static void main(String[] args){ String Str1 = "String 1"; String Str2 = "

我不能真正理解下面的代码。 “清除”方法将删除指定给“al”的所有元素,对吗?然后ArrayList al接收字符串Str2的值,alal接收字符串Str3的值

那么,如果alal只分配了Str3,那么输出结果到底是怎样的呢?有人能解释一下吗?非常感谢

输出:

[字符串2]

[[String 2],String 3]

public static void main(String[] args){

    String Str1 = "String 1";
    String Str2 = "String 2";
    String Str3 = "String 3";


    ArrayList al = new ArrayList();
    ArrayList alal = new ArrayList();


    al.add(Str1);
    alal.add(al);

    al.clear();

    al.add(Str2);
    alal.add(Str3);

    System.out.println(al);
    System.out.println(alal);
}

因为
alal
引用了
al


al
引用所做的任何更改都将反映在
alal

中,因为
alal
引用了
al


al
引用所做的任何更改都将反映在
alal

您从未清除过alal,因此在添加Str3时它仍然包含al。

您从未清除过alal,因此在添加Str3时它仍然包含al。

您使用的是原始
ArrayList
,因此您可以在列表中存储任何类型的
对象。请注意,您将
al
存储在
alal
中,这意味着将
al
的引用存储到
alal
中,而不是将
al
中的值存储到
alal

更深入的解释:

al.add(Str1); //al -> [String 1]
alal.add(al); //alal -> [ [String 1] ]

al.clear(); //al -> []   ,   alal -> [ [] ]
al.add(Str2); // al -> [String 2] , alal -> [ [String 2] ]
alal.add(Str3); //alal -> [ [String 2], String 3]

System.out.println(al);
System.out.println(alal);
您给定代码中的一些建议:

  • 为变量使用更好的名称<对于一个基本示例来说,code>al
alal
可能看起来不错,但最好提供有助于提高代码可读性的名称
  • 如果要阻止您或其他程序员在
    阵列列表
    (或其他
    集合
    )中存储任何内容,请使用。这意味着,像
    ArrayList alal
    这样声明变量,现在编译器将检查您是否只能添加
    String
  • 如果要将元素从
    al
    传递到
    alal
    ,请使用方法
  • 在这种情况下,最好将变量声明为
    List
    ,而不是
    ArrayList
    。最好习惯于:

  • 您使用的是原始
    ArrayList
    ,因此您可以在列表中存储任何类型的
    对象。请注意,您将
    al
    存储在
    alal
    中,这意味着将
    al
    的引用存储到
    alal
    中,而不是将
    al
    中的值存储到
    alal

    更深入的解释:

    al.add(Str1); //al -> [String 1]
    alal.add(al); //alal -> [ [String 1] ]
    
    al.clear(); //al -> []   ,   alal -> [ [] ]
    al.add(Str2); // al -> [String 2] , alal -> [ [String 2] ]
    alal.add(Str3); //alal -> [ [String 2], String 3]
    
    System.out.println(al);
    System.out.println(alal);
    
    您给定代码中的一些建议:

    • 为变量使用更好的名称<对于一个基本示例来说,code>al
    alal
    可能看起来不错,但最好提供有助于提高代码可读性的名称
  • 如果要阻止您或其他程序员在
    阵列列表
    (或其他
    集合
    )中存储任何内容,请使用。这意味着,像
    ArrayList alal
    这样声明变量,现在编译器将检查您是否只能添加
    String
  • 如果要将元素从
    al
    传递到
    alal
    ,请使用方法
  • 在这种情况下,最好将变量声明为
    List
    ,而不是
    ArrayList
    。最好习惯于:

  • 当您执行
    alal.add(al)时
    ,您没有将任何内容从
    al
    复制到
    alal
    ,而是将
    alal
    的第一个元素设置为
    al
    (您正在将列表存储到列表中,这是允许的)。清除
    al
    时,将从中删除每个元素,但不创建新列表(该列表将不再位于
    alal
    中)。
    当您转到打印
    alal
    时,您正在打印其中的每个元素。第一个元素是列表
    al
    ,它打印为
    [String 2]
    (然后是
    String 3
    )。

    当您执行
    alal.add(al)时;
    ,您没有将任何内容从
    al
    复制到
    alal
    ,您实际上是将
    alal
    的第一个元素设置为
    al
    (您正在将一个列表存储到一个列表中,这是允许的)。当您清除
    al
    时,您将从中删除所有元素,但不创建新列表(这将不再在
    alal
    中。
    当您转到打印
    alal
    时,您正在打印其中的每个元素。第一个元素是list
    al
    ,它打印为
    [String 2]
    (然后是
    String 3
    )。

    首先,在代码中,您声明了3个字符串变量(Str1、Str2和Str3)和2个ArrayList(al和alal)

    现在,您正在使用以下命令将元素Str1添加到列表中:

    al.add(Str1); //Here your variable al has the value ["String1"]
    
    当你分配

    alal.add(al); // Now your variable alal has the value [["String1"]]
    
    当您将新元素添加到变量alal时,结果是

    alal.add(Str3); // Now you are adding the string to your array, and the result is `[["String1"],"String 3"]`
    

    如果在分配新结果之前需要删除结果,则需要对alal变量执行
    。清除
    ,只包含字符串数组而不包含字符串数组。

    首先,在代码中声明3个字符串变量(Str1、Str2和Str3)和2个ArrayList(al和alal)

    现在,您正在使用以下命令将元素Str1添加到列表中:

    al.add(Str1); //Here your variable al has the value ["String1"]
    
    当你分配

    alal.add(al); // Now your variable alal has the value [["String1"]]
    
    当您将新元素添加到变量alal时,结果是

    alal.add(Str3); // Now you are adding the string to your array, and the result is `[["String1"],"String 3"]`
    

    如果您需要在收到新的结果之前删除结果,则需要做一个<代码>。清除< /代码>到ALALL变量,只包含一个字符串数组,而不是字符串数组。

    让我们考虑一下逐行发生的事情:

    1.

    al.add(Str1);
    
    alal.add(al);
    
    al.clear();
    
    al.add(Str2);
    
    alal.add(Str3);
    
    al
    现在包含字符串“String 1”,看起来像:[“String 1”]

    2.

    al.add(Str1);
    
    alal.add(al);
    
    al.clear();
    
    al.add(Str2);
    
    alal.add(Str3);
    
    alal
    现在包含
    al
    al
    当前是[“字符串1”])。因此,
    alal
    看起来像:[[“字符串1”]]

    3.

    al.add(Str1);
    
    alal.add(al);
    
    al.clear();
    
    al.add(Str2);
    
    alal.add(Str3);
    
    由于
    al
    的内容已清除,因此现在看起来像:[] 但是
    alal
    也有一个对
    al
    的引用,所以
    alal
    看起来像:[[]]

    4.

    al.add(Str1);
    
    alal.add(al);
    
    al.clear();
    
    al.add(Str2);
    
    alal.add(Str3);
    
    al
    现在看起来像:[“字符串2”] 正如我们所知,
    alal
    a