一、Iterator接口是什么?
java.util.Iterator
Iterator翻译过来叫做迭代器,是一个接口,用于遍历Collection集合中的元素,Collection接口中的iterator方法能够直接提供Iterator实例化的对象。类似与C中的指针的概念,指向下一个元素的地址,或者用链表的概念去理解。
二、Iterator重要的方法
boolean hasNext() -----如果集合中还有元素没有迭代遍历完,那么返回true
Object next() -----返回集合里的下一个元素
void remove() -----删除集合里面上一次next方法返回的元素(当前迭代的位置)
三、Iterator 工作原理
当遍历集合时,首先通过调用c集合的iterator()方法获得迭代器对象,然后使用hashNext()方法判断集合中是否存在下一个元素,如果存在,则调用next()方法将元素取出,否则说明已到达了集合末尾,停止遍历元素。 在调用Iterator的next方法之前,迭代器的索引位于第一个元素之前,不指向任何元素,当第一次调用迭代器的next方法后,迭代器的索引会向后移动一位,指向第一个元素并将该元素返回,当再次调用next方法时,迭代器的索引会指向第二个元素并将该元素返回,依此类推,直到hasNext方法返回false,表示到达了集合的末尾,终止对元素的遍历。
四、使用Iterator遍历集合的场景
一般情况下我们能够使用for(Object e:v) 这样的增强for循环去遍历集合,但是当我们在遍历集合的同时想要删掉指定的元素,增强for循环就会出现问题,在循环的时候我们不能够改变集合的内容(原因是在增强循环中删除第二个元素以后在迭代到第二个元素的时候实际上已经是第三个元素了,会影响迭代的判断)。
Collection c = new ArrayList(); // Arraylist实现
c.add("唐僧");
c.add("悟空");
c.add("沙僧");
c.add("白龙");
c.add("八戒");
for(Object obj : c){
if(obj.equals("悟空")){
c.remove(obj);
}
}
那么这种时候我们可以用Iterator去实现这样的功能。
Iterator iterator = c.iterator();
while(iterator.hasNext()){
Object obj = iterator.next();
if(obj.equals("悟空")){
iterator.remove();
}
}
System.out.println(c);