java(七)迭代器 Iterator

迭代器遍历

注意事项一: 

    如果调用remove之前没有调用next是不合法的,会抛出IllegalStateException

	Iterator it = list.iterator();
		while (it.hasNext()) {
			// 调用remove之前没有调用next是不合法的
			// it.remove();
			// java.lang.IllegalStateException
			String next = (String) it.next();
			System.out.println(next);
		}

 迭代器在变量元素的时候要注意事项二

      在迭代器迭代元素 的过程中,不允许使用集合对象改变集合中的元素个数,如果需要添加或者删除只能使用迭代器的方法进行操作。

  如果使用过了集合对象改变集合中元素个数那么就会出现ConcurrentModificationException异常。

  迭代元素 的过程中:   迭代器 创建到使用结束的时间。
public class test_1 {	
	public static void main(String[] args) {
		  List list = new ArrayList(); 
		  list.add("仙女"); 
		  list.add("女侠"); 

		  ListIterator it = list.listIterator();
                  list.add("付祖贤");
                  it.next();  
		  System.out.println("集合的元素:  " + list);	 		
	}
}

这样会出现错误! 

public class test_1 {	
	public static void main(String[] args) {
		  List list = new ArrayList(); 
		  list.add("仙女"); 
		  list.add("女侠"); 
		  ListIterator it = list.listIterator();
		  
		  	while(it.hasNext()){	
		  		
			System.out.print(it.next()+",");
			it.add("aa"); // 把元素添加到当前指针指向位置, 必须使用迭代器的方法添加
		//	list.add("aa");  // add方法是把元素添加到集合的末尾处的。 这种方法出错!	
		}
		  System.out.println("集合的元素:  " + list);	 		
	}
}

     如果是List集合,想要在迭代中操作元素可以使用List集合的特有迭代器ListIterator,该迭代器支持在迭代过程中,添加元素和修改元素。

List特有的迭代器ListIterator

 *    List 接口中特有的方法:
 *    迭代:
 *     listIterator()  返回此列表元素的列表迭代器(按适当顺序)。 
 *     
 *     hasPrevious()  
 *        如果以逆向遍历列表,列表迭代器有多个元素, 判断是否有上一个元素,则返回 true
 *     
 *     previous()  返回列表中的前一个元素, 当前指针向上移动一个单位,然后取出当前指针指向的元素
 *     next()     先取出当前指针指向的元素,然后指针向下移动一个单位
    
 *     add(E e)   将指定的元素插入列表,把当前元素插入到当前指针指向的位置,后面的元素下移
 *    

 *     set(E e)   用指定元素替换 next 或 previous 返回的最后一个元素 

 使用三种方式遍历集合的元素. 

    第一种: 使用get方法遍历。
    第二种: 使用迭代器  正序  遍历。

    第三种: 使用迭代器   逆序  遍历。

public class test_1 {	
	public static void main(String[] args) {
		List list = new ArrayList();
		list.add("张三");
		list.add("李四");
		list.add("王五");
		
		System.out.println("======get方法遍历=======");
		for(int i = 0 ; i<list.size() ; i++){
			System.out.print(list.get(i)+",");
		}
		
		System.out.println("\r\n======使用迭代器正序遍历==========");
		ListIterator it = list.listIterator();	//获取到迭代器
		while(it.hasNext()){
			System.out.print(it.next()+",");
		}	
		
		System.out.println("\r\n======使用迭代器逆序遍历==========");
		while(it.hasPrevious()){
			System.out.print(it.previous()+",");
		}
	}
} 



猜你喜欢

转载自blog.csdn.net/image_fzx/article/details/80246275