Iterator

package com.neutron.collection.iterator;

import java.util.ArrayList;
import java.util.List;
import java.util.ListIterator;

/**
 * Iterator接口学习
 * @author zhanght
 *
 */
public class IteratorDemo {

	public static void main(String[] args) {
		List list = new ArrayList();
		list.add("123");
		list.add(12);
		list.add(true);
		list.add(false);
		list.add("end");
		
		/*
		 * 会存在的问题:
		 * 删除某个索引的元素后,该元素后面的数据会向前挪动一位。
		 * 比如删除索引1位置的元素,原来索引位置2的元素向前挪动一位,
		 * 下一轮遍历后原来索引2位置的元素就会遍历不到。
		 */
		for (int i=0; i<list.size(); i++) {
			if (i == 1) {
				list.remove(i);
			}
			System.out.println(list.get(i));
		}
		
		/*
		 * 会发生并发访问异常
		 * 原因在于在迭代的过程中,不可以使用集合对象的方法操作集合中的元素。
		 * 在迭代器中,只能用迭代器方法操作元素,而Iterator接口方法有限,只有判断取出删除操作
		 * public interface Iterator<E> {
			    boolean hasNext();
			    E next();
			    default void remove() {
			        throw new UnsupportedOperationException("remove");
			    }
			    default void forEachRemaining(Consumer<? super E> action) {
			        Objects.requireNonNull(action);
			        while (hasNext())
			            action.accept(next());
			    }
			}
			需要使用ListIterator方法进行操作
		 * 
		 */
//		for(Iterator iterator = list.iterator(); iterator.hasNext();) {
//			Object obj = iterator.next();
//			if ("end".equals(obj)){
//				list.add("begin");
//			}
//		}
		
		System.out.println("------------");
		for(ListIterator iterator = list.listIterator(); iterator.hasNext();) {
			Object obj = iterator.next();
			System.out.println(obj);
			if ("end".equals(obj)){
				iterator.add("begin");
			}
			
			/*
			 *  123
			    true
			    false
			    end
			 */
		}
		
		System.out.println("add: " + list);
		// add: [123, true, false, end, begin]
	}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值