使用iterator方法做集合的遍历删除不会出问题,但是使用增强foreach循环 以及 fori循环都有可能出现很多问题
public class IteratorDemo {
public static void main(String[] args) {
//构建一个没有泛型的集合
ArrayList list = new ArrayList();
list.add(1);
list.add(true);
list.add("你好");
list.add(2);
//直接使用迭代器来对该对象进行迭代
Iterator ite = list.iterator();
while(ite.hasNext()) {
Object obj = ite.next();
System.out.println(obj);
}
//构建一个带泛型的集合
List<String> list1 = new ArrayList<String>();
list1.add("aaa");
list1.add("bbb");
list1.add("ccc");
list1.add("ddd");
//使用Iterator来进行迭代
Iterator<String> ite1 = list1.iterator();
while(ite1.hasNext()) {
String str = ite1.next();
System.out.println(str);
if("bbb".equals(str)) {
ite1.remove();
}
}
// //使用for循环来进行迭代
//在遍历中进行元素的删除的话,会造成i一直在移动,但是元素却因为删除再
//进行了一次往前的移位,最后导致你在取数据的时候,会漏掉一些数据
//解决的办法就是在进行删除元素之后,不要让下标进行移动!
// for(int i = 0 ;i<list1.size();i++) {
// System.out.println(list1.get(i));
// if("bbb".equals(list1.get(i))) {
// list1.remove("bbb");
// i--;
// }
// }
System.out.println("---------------------------");
//使用foreach循环来进行迭代并且迭代过程中进行元素的删除
//在遍历中进行删除元素的话,有很大的几率会因为破坏容器的结构导致出异常
// for(String str :list1) {
// if("ccc".equals(str)) {
// list1.remove("ccc");
// }
// System.out.println(str);
// }
System.out.println(list1);
}
}