ArrayList的循环
随机生成20个[1,100]之间的随机整数,存入一个数组,然后取出其中大于15的整数放入一个List集合,最后利用循环在控制台上输出。然后将集合中的奇数全部清除,只留下偶数,查看剩余的偶数以及个数。
import java.util.*;
public class RandomArrayList {
public static void main(String[] args) {
ArrayList<Integer> list = new ArrayList<>();
//设置变量控制打印的个数
int num = 5;
//创建一个长度为num的数组
int[] a = new int[num];
Random random = new Random();
for (int i = 0; i < num; i++) {
//随机生成1~100的数
int sc = (int) (random.nextInt(101));
//将生成的数存入数组
a[i] = sc;
//判断是否大于50;若大于存入ArrayList
if (sc > 50) {
list.add(sc);
}
}
System.out.println(Arrays.toString(a));
System.out.println(list);
System.out.println("-----增强for------");
for (int temp : list) {
System.out.println(temp);
}
System.out.println("----迭代器-----");
Iterator iterator = list.iterator();
while (iterator.hasNext()) {
System.out.println(iterator.next());
}
System.out.println("------ListIterator--------");
ListIterator listIterator = list.listIterator();
while (listIterator.hasNext()) {
System.out.println(listIterator.next());
}
System.out.println("------普通for--------");
for (int i = 0; i < list.size(); i++) {
if (list.get(i) % 2 == 0) {
System.out.println("移除偶数"+ list.remove(i));
//每删除一个数时,下一个数的下标会自动为该数的下标,而该下标已经进行完循环判断,导致跳数
//例:第五个数为非法时,删除第五个数,结束本次判断,i++,进行第六个数的判断。而原第六个数的下标改为
// 五,原第七数下标改为六,对下标为六的数进行判断,原第六个数没有进行判断。i=i-1,继续判断一次
// 解决该问题。
i-=i;
}
}
System.out.println(list);
System.out.println(list.size());
}
}
/*
*备注:使用list.remove(int index)移除下标时将返回对应的value值;
使用list.remove(Object o)移除下标时将返回对应的boolen(ture/flase)值
* 可以使用 System.out.println()进行打印;;
*
* 使用for增强循环遍历ArrayList时,不能直接使用list.remove(int index);
* 临时变量 temp, list.remove(temp)此时被当作下标,产生数组越界
* Exception in thread “main” java.lang.IndexOutOfBoundsException: Index: 72, Size: 4
*
*使用迭代器时 iterator.next(),为一个Object对象,无法直接进行判断是否为偶数(%2==0)
*
*
*疑问: 使用ArrayList循环遍历对里面数据进行筛选时操作时只能使用普通for ?
*
*
* */