Iterator迭代器与其它循环之间的删除比较

使用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);
	}
}

猜你喜欢

转载自blog.csdn.net/qq_44625080/article/details/112728423