我不太明白下面的代码。
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);
来自您给定代码的一些建议:
为变量使用更好的名称。对于一个基本示例,
al
和alal
看起来不错,但是最好提供有助于代码可读性的名称。如果要防止您或其他程序员将任何内容存储在
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/