Java ArrayList clear()方法

Bob*_*Bob 1 java arraylist

我无法理解下面的代码.clear方法删除分配给"al"的所有元素吧?然后ArrayList al接收字符串Str2的值,alal接收Str3的值.

那么如果仅使用Str3分配alal,那么输出如何如下呢?有人可以解释一下吗?非常感谢

OUTPUT:

[String 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);
}
Run Code Online (Sandbox Code Playgroud)

Lui*_*oza 7

您使用的是raw ArrayList,因此您可以Object在列表中存储任何类型.需要注意的是你存储al里面alal,这意味着存储的基准alalal,从不是值alalal.

更深入的解释:

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);
Run Code Online (Sandbox Code Playgroud)

来自您给定代码的一些建议:

  • 为变量使用更好的名称.al并且alal可能看起来适合一个基本的例子,但提供有助于代码可读性的名称会更好.
  • 如果您想阻止您或其他程序员在(或另一个)中存储任何内容,请使用泛型.这意味着,如此声明变量,编译器将检查您是否只能添加值.ArraListCollectionArrayList<String> alalString
  • 如果要将元素从中传递alalal,请使用ArrayList#addAll方法.
  • 在这种情况下,最好将变量声明ListArrayList.最好习惯编程到接口而不是直接类实现: