我不太明白下面的代码。
clear方法会删除所有分配给“ 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);
}

最佳答案

您使用的是原始ArrayList,因此可以在列表中存储任何类型的Object。请注意,您将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);


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


为变量使用更好的名称。对于一个基本示例,alalal看起来不错,但是最好提供有助于代码可读性的名称。
如果要防止您或其他程序员将任何内容存储在ArraList(或另一个Collection)中,请使用generics。这意味着,将变量声明为ArrayList<String> alal,这样编译器将检查您是否只能添加String值。
如果要将元素从al传递到alal,请使用ArrayList#addAll方法。
在这种情况下,最好将变量声明为List而不是ArrayList。最好习惯program to an interface rather than a direct class implementation

关于java - Java ArrayList clear()方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23229124/

10-09 05:17