Java ArrayList clear()方法
我不能真正理解下面的代码。 “清除”方法将删除指定给“al”的所有元素,对吗?然后ArrayList al接收字符串Str2的值,alal接收字符串Str3的值 那么,如果alal只分配了Str3,那么输出结果到底是怎样的呢?有人能解释一下吗?非常感谢 输出: [字符串2] [[String 2],String 3]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 = "
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
时,您正在打印其中的每个元素。第一个元素是listal
,它打印为[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