`
LiYinlei
  • 浏览: 67885 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论
阅读更多

上一篇已经说过了Iterator迭代器的原理是使用内部类实现的,现在说说

迭代器的取值方式和对元素操作的注意事项:

 

1.迭代器的取值方式一般有两种:

	public class IteratorDemo {									
		
		public static void main(String[] args)								
		{								
			Collection coll = new ArrayList();							
										
			coll.add("abc1");							
			coll.add("abc2");							
			coll.add("abc3");							
			coll.add("abc4");												
										
			Iterator it1 = coll.iterator();							
										
//			next方法自动往下取元素.							
//			当取到了不存在的元素。NoSuchElementException							
			//取法一							
			while (it1.hasNext())							
			{							
										
				System.out.println(it1.next());						
			}							
			System.out.println(it1.hasNext());  //false 但it1还有							
										
			Collection coll2 = new ArrayList();							
										
			coll2.add("abc1");							
			coll2.add("abc2");							
			coll2.add("abc3");							
			coll2.add("abc4");							
			//常用的取法二							
			for (Iterator it = coll2.iterator(); it.hasNext(); ){							
				System.out.println (it.next()+"----------");						
			}							
		}								
	}	

 

2.Iterator迭代器在取值时的请注意不要同时使用集合增加,修改元素:

/*
	在迭代过程中,如果使用集合对象继续操作元素,有可能发生ConcurrentModificationException。
	
	所以,需要做的是要么使用集合对象操作元素,
	要么使用迭代器操作元素。不要同时使用。
	
	在迭代过程中如果需要操作元素,可以使用迭代器的方法。
	但是很遗憾,Iterator中只有对元素的判断,获取,删除操作,
	
	这是就需要使用Iterator对象子接口来实现。就是 ListIterator.注意这个列表迭代器只有List集合具备。
	ListIterator具备在迭代过程中对元素进行增删改查的动作。
*/

public class ListIteratorDemo {

	public static void main(String[] args) 
	{
		List<String> list = new ArrayList<String>();

		list.add("abc1");
		list.add("abc2");
		list.add("abc3");

		Iterator<String> it  = list.iterator();
		
		ListIterator<String> liIterator = list.listIterator();

		
	/*	while(it.hasNext())
		{
			String str = (String)it.next();
			System.out.println(str);
			
			if(str.equals("abc2"))
				list.add("abcxxx");//这里使用了迭代器和集合本身同时操作元素的错误,会报异常:ConcurrentModificationException
		}*/
		
		while(liIterator.hasNext())
		{
			String str = (String)liIterator.next();
			System.out.println("取值:"+str);
			
			if(str.equals("abc2")){
				liIterator.set("xxx");
			}else if(str.equals("abc3")){
				liIterator.add("yyy");
			}else if(str.equals("abc1")){
				liIterator.remove();
			}
		}

		System.out.println("修改后的值:"+list);//[xxx, abc3, yyy]


		while(liIterator.hasPrevious())//从下往上取值
		{
			System.out.println("修改后的从下往上取值:"+liIterator.previous());
		}
	}
}

 ListIteratorDemo类中main方法执行后输出的值为:

取值:abc1

取值:abc2

取值:abc3

修改后的值:[xxx, abc3, yyy]

修改后的从下往上取值:yyy

修改后的从下往上取值:abc3

修改后的从下往上取值:xxx

 

0
3
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics