使用循环语句,当心陷阱,如:下面例子:
1、创建List数组,并向其添加数组.
2、用for循环,移除List所有元素
3、判断List是否为空,如果不为空,打印List所有元素
剩下元素的个数为1. 具体元素有:World
========================================
通过上面例子,使用循环移除List所有元素,其结果并不是按我们所想,把所有元素移除,而是保留了一位元素。
循环代码着实给我们挖了一大坑,好家伙!
下面我们用代码形式了解下,它是怎么给我们挖坑,坑是怎么形成。 如:
2、用for循环,移除List2所有元素
for循环值:i=0
list2的元素总数为:3
现在list2的所有元素及对应的下标 :
list2[0] = Hello, 对应下标为0
list2[1] = World, 对应下标为1
list2[2] = Java, 对应下标为2
通过i值,移除List2对应下标的元素值:list2[0] = Hello, 对应下标为0
通过移除元素后,list2现在的元素及对应下标:
list2[0] = World, 对应下标为0
list2[1] = Java, 对应下标为1
----------------------------------------
for循环值:i=1
list2的元素总数为:2
现在list2的所有元素及对应的下标 :
list2[0] = World, 对应下标为0
list2[1] = Java, 对应下标为1
通过i值,移除List2对应下标的元素值:list2[1] = Java, 对应下标为1
通过移除元素后,list2现在的元素及对应下标:
list2[0] = World, 对应下标为0
----------------------------------------
========================================
通过例子,我们知道坑是怎么形成的原因:
1、每当删除一个元素,所有检索值必然减1,即所有元素重新排列位置,导致list2[0]有元素。
2、而此时循环语句i,按规继续增加1,list2[0]的值无法删除。
解决方法:在循环语句中,每次删除元素后,重新计算i的值,从而实现删除元素后,i值不变,从而实现循环删除所有元素。
2、用for循环,移除List3所有元素
for循环值:i=0
list3的元素总数为:3
现在list3的所有元素及对应的下标 :
list3[0] = Hello, 对应下标为0
list3[1] = World, 对应下标为1
list3[2] = Java, 对应下标为2
通过i值,移除List3对应下标的元素值:list3[0] = Hello, 对应下标为0
通过移除元素后,list3现在的元素及对应下标:
list3[0] = World, 对应下标为0
list3[1] = Java, 对应下标为1
让i值始终为0,i-1=-1因‘i++’这个条件使i=0
----------------------------------------
for循环值:i=0
list3的元素总数为:2
现在list3的所有元素及对应的下标 :
list3[0] = World, 对应下标为0
list3[1] = Java, 对应下标为1
通过i值,移除List3对应下标的元素值:list3[0] = World, 对应下标为0
通过移除元素后,list3现在的元素及对应下标:
list3[0] = Java, 对应下标为0
让i值始终为0,i-1=-1因‘i++’这个条件使i=0
----------------------------------------
for循环值:i=0
list3的元素总数为:1
现在list3的所有元素及对应的下标 :
list3[0] = Java, 对应下标为0
通过i值,移除List3对应下标的元素值:list3[0] = Java, 对应下标为0
通过移除元素后,list3现在的元素及对应下标:
让i值始终为0,i-1=-1因‘i++’这个条件使i=0
----------------------------------------
import java.util.ArrayList;
import java.util.List;
public class Array_List {
public static void main(String[] args) {
System.out.println("使用循环语句,当心陷阱,如:下面例子:");
System.out.println("\t 1、创建List数组,并向其添加数组.");
List<String> list = new ArrayList<>();
list.add("Hello");
list.add("World");
list.add("Java");
System.out.println("\t 2、用for循环,移除List所有元素");
for(int i = 0;i<list.size();i++){
list.remove(i);
}
System.out.println("\t 3、判断List是否为空,如果不为空,打印List所有元素");
if(list.size()>0){
System.out.print("\n 剩下元素的个数为" + list.size() + ". 具体元素有:");
for(int i = 0;i<list.size();i++){
System.out.print(list.get(i) + " ");
}
}else {
System.out.println("\n 元素已删除");
}
System.out.println("\n \n ========================================");
System.out.println("通过上面例子,使用循环移除List所有元素,其结果并不是按我们所想,把所有元素移除,而是保留了一位元素。\n" +
"循环代码着实给我们挖了一大坑,好家伙!\n" +
"下面我们用代码形式了解下,它是怎么给我们挖坑,坑是怎么形成。 如:");
List<String> list2 =new ArrayList<>();
list2.add("Hello");
list2.add("World");
list2.add("Java");
System.out.println("\t 2、用for循环,移除List2所有元素");
for(int i = 0;i<list2.size();i++){
System.out.println("\t\tfor循环值:i=" + i);
System.out.println("\t\tlist2的元素总数为:"+list2.size());
System.out.println("\t\t现在list2的所有元素及对应的下标 :");
for (int j = 0; j < list2.size(); j++) {
System.out.println("\t\tlist2[" + j + "] = " + list2.get(j)+ ", 对应下标为" + j);
}
String re_str = list2.remove(i);
System.out.println("\t\t通过i值,移除List2对应下标的元素值:list2["+i+"] = " + re_str +", 对应下标为" +i);
System.out.println("\t\t通过移除元素后,list2现在的元素及对应下标:");
for (int j = 0; j < list2.size(); j++) {
System.out.println("\t\tlist2[" + j + "] = " + list2.get(j)+ ", 对应下标为" + j);
}
System.out.println("----------------------------------------");
}
System.out.println("\n \n ========================================");
System.out.println("通过例子,我们知道坑是怎么形成的原因:\n\t1、每当删除一个元素,所有检索值必然减1,即所有元素重新排列位置,导致list2[0]有元素。" +
"\n\t2、而此时循环语句i,按规继续增加1,list2[0]的值无法删除。");
System.out.println("解决方法:在循环语句中,每次删除元素后,重新计算i的值,从而实现删除元素后,i值不变,从而实现循环删除所有元素。");
List<String> list3 =new ArrayList<>();
list3.add("Hello");
list3.add("World");
list3.add("Java");
System.out.println("\t 2、用for循环,移除List3所有元素");
for(int i = 0;i<list3.size();i++){
System.out.println("\t\tfor循环值:i=" + i);
System.out.println("\t\tlist3的元素总数为:"+list3.size());
System.out.println("\t\t现在list3的所有元素及对应的下标 :");
for (int j = 0; j < list3.size(); j++) {
System.out.println("\t\tlist3[" + j + "] = " + list3.get(j)+ ", 对应下标为" + j);
}
String re_str = list3.remove(i);
System.out.println("\t\t通过i值,移除List3对应下标的元素值:list3["+i+"] = " + re_str +", 对应下标为" +i);
System.out.println("\t\t通过移除元素后,list3现在的元素及对应下标:");
for (int j = 0; j < list3.size(); j++) {
System.out.println("\t\tlist3[" + j + "] = " + list3.get(j) + ", 对应下标为" + j);
}
System.out.println("让i值始终为0,i-1=" + (i -= 1)+"因‘i++’这个条件使i=0");
System.out.println("----------------------------------------");
};
}
}