Java学习历程

迭代器

迭代器的作用

-比如当我们已经把一些对象存放在了ArrayList之中,这个时候,我们想要修改数据结构,想要把他们放到容器Set之中,对Set中的元素加以处理,我们原本已经为ArrayList构建了大量的代码来完成一系列的工作,结果现在来了一个set,为了保持一个代码共用性,就出现了迭代器,因为所有的容器底层都实现了接口Iterable(可迭代的)。

迭代器相关方法

1.it.hasNext() 这是用来判定是否还存在下一个元素
对于我自身的理解,在一开始,你设置了一个迭代器Iterator it=pet.iterator()
其中括号里可以添加index ,表示从何处开始设置迭代,这就好比有一个指针指在第一个元素的前一个位置,所以我们要循环迭代一个容器,进场使用while(it.hasNext())
但是请注意:当我们用一个while(it.hasNext()),迭代器并不会自动向后推进,
我们需要在循环里面添加it.next()这样迭代器才会自动向后推进,这也就引入了我梦下面的it.next()
2.it.next()这是获取迭代器里的对象
it.next() 每次实行一次这个,迭代器会自动向后推进一个,这样得以遍历整个容器
3.it.remove是将迭代器器“指针”指向的元素删除,我们在删除的时候也要注意使用it.next()进行向后推进,不然会报

Exception in thread "main" java.lang.IllegalStateException
    at java.base/java.util.ArrayList$Itr.remove(ArrayList.java:976)
    at collection.simpleinterator.main(simpleinterator.java:12)

4.忘了说了迭代器的构建了,容器对象.iterator()构建迭代器
Iterator it=pets.iterator()

迭代器与容器间关系

1.当你在迭代器中使用remove对元素进行删除时,容器中也会改变
2.要保持一致性,当你得到了一个迭代器,但是你在此之后对容器的元素做了一些改变,这个时候你再想要使用迭代器时会报错

package collection;
import java.util.*;
public class simplelistinterator {
public static void main(String [] args)
{
    List<Integer> number=new ArrayList<Integer>(Arrays.asList(1,2,3,4,5,5,5));
    Iterator it=number.listIterator();
    number.add(0,100);
    while(it.hasNext())
    {
      Integer i=(Integer) it.next();
      System.out.print(i);
    }
    
}
}
Exception in thread "main" java.util.ConcurrentModificationException
    at java.base/java.util.ArrayList$Itr.checkForComodification(ArrayList.java:1009)
    at java.base/java.util.ArrayList$Itr.next(ArrayList.java:963)
    at collection.simplelistinterator.main(simplelistinterator.java:11)

我们需要重新获取迭代器

package collection;
import java.util.*;
public class simplelistinterator {
public static void main(String [] args)
{
    List<Integer> number=new ArrayList<Integer>(Arrays.asList(1,2,3,4,5,5,5));
    Iterator it=number.listIterator();
    number.add(0,100);
    Iterator its=number.listIterator();  //重新获取一次迭代器
    while(its.hasNext())
    {
      Integer i=(Integer) its.next();
      System.out.print(i);
    }
    
}
}

双向移动迭代器LIstIterator

ListIterator是Iterator一个强大的子类型,但它只能用于List的类的访问,其特点是可以双向的访问

方法

1..listIterator()
例如:ListIterator it=pets.listIterator()

2.it.hasPrevious()用来判断前面是否还有元素
与之相对应的是it.previous(),迭代器向前移动一个

3it.hasNext()与前面的一样,与之相对应的是it.next()```,迭代器向后移动一个

4.```it.set(v),扫描过的最近的一次的那个数置为v

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。