一、Iterator简介
Iterator是一种迭代器,它可以遍历集合类中所有元素。
Iterator迭代器经常被用于遍历集合,其中包括ArrayList、LinkedList、HashSet、TreeSet等集合。
Iterator提供了一个统一的遍历方式,同时可以防止程序员直接访问集合中的元素。
二、Iterator的优势
相对于其他集合遍历方式,Iterator有以下优势:
1. 隐藏迭代器的底层实现细节,不必关心元素是否存储于集合内或近集合上,只需调用hasNext()和next()方法即可访问元素。
2. Iterator迭代器是线程安全的,可以同时被多个线程使用。
3. Iterator提供了更加简洁而优美的语法以及不产生额外的负担。
三、Iterator常用方法
Iterator提供了以下常用方法:
public boolean hasNext() // 如果仍有元素可以迭代,则返回 true public E next() // 返回下一个元素 public void remove() // 从迭代器指向的 collection 中移除最后返回的元素(可选操作)
1. hasNext()方法
hasNext()方法返回一个boolean类型的值,如果还有下一个元素可迭代,方法返回true,否则返回false。
例如:
public static void main(String[] args) { Listlist = new ArrayList<>(); list.add("Java"); list.add("Python"); Iterator iterator = list.iterator(); while (iterator.hasNext()) { System.out.println(iterator.next()); } }
2. next()方法
next()方法返回集合的下一个元素,并且将迭代器的位置向下移动一位。
例如:
public static void main(String[] args) { Listlist = new ArrayList<>(); list.add("Java"); list.add("Python"); Iterator iterator = list.iterator(); while (iterator.hasNext()) { System.out.println(iterator.next()); } }
3. remove()方法
remove()方法用于删除集合中迭代器访问的最后一个元素。如果调用remove()方法之前未调用next()方法,或者在上一次调用next()方法之后调用remove()方法,则会抛出IllegalStateException异常。
例如:
public static void main(String[] args) { Listlist = new ArrayList<>(); list.add("Java"); list.add("Python"); Iterator iterator = list.iterator(); while (iterator.hasNext()) { String str = iterator.next(); if ("Java".equals(str)) { iterator.remove(); } } System.out.println(list);//输出:[Python] }
四、Iterator的局限性
Iterator虽然有很多优势,但它也有一些局限性:
1. 仅能用一次,每调用一次hasNext()和next()方法都会让迭代器向下移动一次位置,不能重复使用。
2. 不能对集合进行同时的遍历和修改操作,否则会抛出ConcurrentModificationException异常。
3. 遍历时不能直接删除集合元素,只能使用迭代器的remove()方法。
五、总结
Iterator提供了一种简单而有效的遍历集合的机制。它不仅隐藏了底层实现细节,还提供了更加简洁而优美的语法。
需要注意的是,Iterator只能用一次,不能对集合进行同时的遍历和修改操作,遍历时只能使用迭代器的remove()方法,否则会抛出异常。