使用Iterator接口
Iterator主要用于遍历Collection集合中的元素(迭代访问)。
Iterator对象也叫迭代器。
Iterator接口向应用程序提供了遍历Collection集合元素的统一编程接口。Iterator接口定义了三个方法:
1、boolean hasNext():如果被迭代的集合元素还没有被遍历,返回true.
2、Object next():返回集合里面的下一个元素.
3、void remove():删除集合里上一次next方法返回的元素.
Iterato仅用于遍历集合,本身不提供盛装对象的能力。要创建Iterator对象的前提是有一个被迭代的集合。
*重点:
当用Iterator对集合元素进行迭代时,并不是把集合本身元素传给迭代变量,而是把集合元素的值传给了迭代变量,所以修改迭代变量的值对集合元素本身无任何影响。 只有通过Iterator的remove方法删除上一次next方法返回的集合元素才可以,否则会引发异常。
Iterator迭代器采用的是 快速失败(fail-fast)机制,一旦在迭代过程中发现集合已被修改,程序立即引发异常,而不是显示修改后的结构,这样可以避免共享资源而引发的潜在问题。
使用foreach循环
与Iterator接口相似的是,foreach循环中的迭代变量也不是集合元素本身,系统只是依次把集合元素的值赋给迭代变量。
public class ForeachTest
{
public static void main(String[] args)
{
Collection books = new HashSet();
books.add(new String("企业应用"));
books.add(new String("疯狂讲义"));
for(Object obj : books)
{
String book = (String)obj;
System.out.println(book);
if(book.equals("疯狂讲义")
{
//下面代码引发异常
books.remove(book);
}
}
System.out.println(books);
}
}
当使用foreach循环时,集合也不能被改变,否则将引发异常。