1. for循环
2. forEach循环
3. Iterator迭代器
4. Enumeration迭代器
/* 数组,集合的遍历方式:
* */
/* 1. 普通for循环 */
String[] strings = new String[10];
for( int i=0; i<strings.length; i++ ){
strings[i] = "dffff"+i;
}
/* 2. 增强for循环 for( value : collection ) */
System.out.println();
for( String string : strings ){
System.out.println(string);
}
System.out.println();
/* 迭代器:
* 迭代器对象提供了一些方法专门处理集合中的元素。遍历,删除,获取集合中的元素,叫做迭代器;
*
* 正式由于每一个容器都有取出元素的功能。这些功能定义都一样,只不过实现的具体方式不同,所以对共性的功能进行了抽取,
* 从而出现了Iterator接口。而每一个容器都在内部对该接口进行了内部类的实现。也就是将取出方式的细节进行封装;
*
*
* 2.3.1 Iterable ( Iterable是协议接口, Iterator是迭代器对象 )
* jdk1.5之后添加的新接口,Collection的父接口。实现了Iterable的类就是可迭代的,并且支持增强for循环.该接口
* 只有一个方法即获取迭代器的方法iterator(),可以获取每个容器自身的迭代器Iterator;
* Collection集合容器都需要获取迭代器(Iterator),于是在5.0之后又进行了抽取将获取容器迭代器的Iterator()方法
* 放入到了Iterable接口中. Collection接口继承了Iterable,所以Collection体系都具备获取自身迭代器的方法,只不
* 过每个子类集合都进行了重写;
*
*
* 2.3.2 Iterator ( 迭代器对象 )
*
* Iterator
*
* Iterator接口定义的方法:
* Iterator 该接口是集合的迭代器接口类, 定义了常见的迭代方法:
* (1) boolean hasNext()
* 判断集合中是否有元素,如果有元素可以迭代就返回true,否则返回fasle;
*
* (2) E next()
* 返回迭代的下一个元素,注意:如果美誉哦下一个元素时,调用next(),会抛异常NoSuchElementException
*
* (3) void remove()
* 从迭代器指向的集合中移除迭代器返回的最后一个元素;
*
*
* 正常的遍历通过 hasNext(),next()方法就可以搞定;
* 但是总有特殊情形,即在遍历的过程中,需要出现删除操作; (即关于 viod remove()方法 )
*
* 1. 在普通的for循环中,如果调用remove方法,就会导致循环出错,因为循环过程中list.size()的大小发生了变化,
* 所以会导致错误。
*
* 2. 迭代器的快速失败机制:
* 由于集合在多线程下遍历情形下,具有线程不安全的特性,所以使用起来需要注意遍历过程中被增加删除的问题;
* 在对集合进行迭代过程中,除非通过迭代器自身remove或者add对集合进行修改,否则在其他线程中以任何形式对集合
* 进行修改,java会抛出并发修改异常ConcurrentModificationException, 普通迭代器只支持在迭代过程中的删除动作;
*
* 3. 其实还可以通过创建新的集合,将需要的元素添加进新集合的方式来达到添加和删除的目的;
* */
/* 3. 迭代器遍历 */
Collection
list.add("计算机网络");
list.add("现代操作系统");
list.add("java编程思想");
list.add("java核心技术");
list.add("java语言程序设计");
System.out.println(list);
System.out.println("");
System.out.print("[");
for( Iterator
String string = iterator.next();
System.out.print(string+", ");
}
System.out.println("]");
/* List特有的迭代器ListIterator
*
* 普通的Iterator 只具备三个接口 boolean hasNext(); void next(); Object remove();
*
* 而List具有自己特有的迭代器ListIterator:
* (1) hasNext();
* (2) next();
* (3) remove();
* (4) add(E e); 将指定的元素插入列表,该元素直接插入到next返回的下一个元素的前面;(如果有)
* (5) set(E o); 用指定元素替换next或者previous返回的最后一个元素; //替换功能
* (6) hasPrevious(); 逆向遍历列表,列表迭代器有多个元素,返回true;
* (7) previous(); 逆向遍历列表,返回列表中的前一个元素;
*
*
* add(E e); set(E o); remove()操作的元素都是迭代器的游标当前指向的元素对象;
*
* */
ArrayList
lst.add("11111");
lst.add("22222");
lst.add("33333");
ListIterator
iterator.next();
iterator.add("12345");
iterator.next();
iterator.remove();
System.out.println( lst );
/* Enumerationd迭代器
*
* 这是一个被旧版本的迭代器; 但是在servlet中总能见到它的身影;
*
* 接口:
* (1) boolean hasMoreElements() 询问是否还有下一个元素
* (2) E nextElement() 获取下一个元素;( 需要hasMoreElements()配合使用 )
* */
Enumeration
while (enumeration.hasMoreElements()) {
String string = (String) enumeration.nextElement();
}