迭代器模式

简介: 迭代器模式

不同的容器,因为使用了不同的数据结构,就注定了他们的遍历方法是不尽相同的,迭代器模式以接口+实现的方式,实现了为不同的聚合对象容器提供了相同的顺序访问方法,而忽略其底层数据结构,这也成为外部迭代(借助第三方的迭代器器完成的迭代)


java内置的迭代器#



如上图是java内置的迭代器的接口图,java的容器中,很多多已经内置迭代器的实现了,我们直接可以使用


如 ArrayList的内置迭代器#


如下代码,是ArrayList的部分源码,可以看到他已经内置迭代器了


/**
 * An optimized version of AbstractList.Itr
 */
private class Itr implements Iterator<E> {
    int cursor;       // index of next element to return
    int lastRet = -1; // index of last element returned; -1 if no such
    int expectedModCount = modCount;
    Itr() {}......


hash表的迭代器#


Hashtable的迭代器


Hashtable的迭代器 hashtable = new Hashtable<String,String>();
hashtable.values().iterator();
hashtable.keySet().iterator();


HashMap的迭代器及5种遍历方式


HashMap map = new HashMap<String,String>();
map.entrySet().iterator(); 
map.keySet().iterator()
map.values().iterator();
// 先遍历key,再遍历value
for (String key : map.keySet()) {
    System.out.println(key + "  " + map.get(key));
}
java.util.Iterator<String> iterator = map.keySet().iterator();
while(iterator.hasNext()){
  String key =   iterator.next();
  map.get(key);
}
for (Map.Entry<String, String> entry : map.entrySet()) {
    System.out.println(entry.getKey() + "  " + entry.getValue());
}
java.util.Iterator<Map.Entry<String, String>> iterator1 = map.entrySet().iterator();
while(iterator1.hasNext())
{
    Map.Entry<String, String> entry=(Map.Entry<String, String>) iterator1.next();
    System.out.println("Key: "+entry.getKey()+" Value: "+entry.getValue());
}
map.forEach((k,v)-> System.out.println(k+"  "+v));


数组,自定义迭代器#


java的数组,是没有迭代器的, 下面自定义自己的迭代器, 其实就是实现Iterator接口,重写抽象方法,最后添加上获取迭代器的方法, 代码如下


public interface Iterator {
   boolean hasNext();
   Object next();
}
@Data
public class Student {
private String name;
private  String[] houseWork ;
public Student(String name){
    this.name=name;
    houseWork = new  String[3];
    houseWork[0]="语文";
    houseWork[1]="数学";
    houseWork[2]="英语";
}
public static void main(String[] args) {
    Student lisi = new Student("李四");
    Iterator iterator = lisi.getIterator();
    while (iterator.hasNext()){
        System.out.println(iterator.next());
    }
}
public Iterator getIterator(){
    return  new  studentIterator();
}
private  class studentIterator  implements Iterator{
    private int position;
    private studentIterator(){
        position=0;
    }
    @Override
    public boolean hasNext() {
       if (position<houseWork.length){
           return true;
       }
       return false;
    }
    @Override
    public String next() {
        String housework = houseWork[position];
        position++;
        return  housework;
    }
  }
}


netty的迭代器#


ByteBuf byteBuf = Unpooled.wrappedBuffer(new byte[]{1, 2, 3, 4});
byteBuf.forEachByte(b->{
    System.out.println(b);
    return true;
});


netty的迭代器并没有通过实现Iterator完成,如上的forEachByte()与普通集合的forEach(), 如出一辙,入参是ByteProcessor, 虽然没有标注是函数式接口,但是只有唯一的抽象方法,可以用它迭代遍历每一个元素

相关文章
|
3月前
|
设计模式 Java 数据挖掘
聊聊Java设计模式-迭代器模式
迭代器(Iterator)模式,也叫做游标(Cursor)模式。我们知道,在Java 容器中,为了提高容器遍历的方便性,我们利用迭代器把遍历逻辑从不同类型的集合类中抽取出来,从而避免向外部暴露集合容器的内部结构。
44 0
聊聊Java设计模式-迭代器模式
|
4月前
|
设计模式 uml C++
行为型 迭代器模式
行为型 迭代器模式
20 0
|
6月前
|
设计模式 存储 算法
设计模式~迭代器模式(Iterator)-20
迭代器模式(Iterator Pattern)是Java和.Net编程环境中非常常用的设计模式。这种模式用于顺序访问集合对象的元素,不需要知道集合对象的底层表示。迭代器模式属于行为型模式。迭代器模式已经被淘汰,java中已经把迭代器运用到各个聚集类(collection)中了,使用java自带的迭代器就已经满足我们的需求了 目录 迭代器模式(Iterator) (1)优点 (2)缺点 (3)使用场景 (4)注意事项 (5)应用实例: 代码
25 0
|
9月前
|
设计模式 存储 Java
迭代器模式
迭代器模式(Iterator Pattern)是一种行为型设计模式,它提供了一种顺序访问聚合对象中每个元素的方法,而不暴露其内部实现。
57 1
|
10月前
|
容器
关于迭代器模式我所知道的
关于迭代器模式我所知道的
40 0
|
11月前
|
设计模式 Java 索引
Java设计模式-迭代器模式(Iterator)
Java设计模式-迭代器模式(Iterator)
|
JavaScript 前端开发
简单理解迭代器模式
这几天研究了一下迭代器模式,期间有一段时间经常搞不太懂一些概念与概念之间的关系,今天来整理一下。
102 0
|
设计模式 算法 Java
Java设计模式 ->迭代器模式
Java设计模式 ->迭代器模式
64 0
|
设计模式 存储 容器
我学会了,迭代器模式
迭代器模式属于行为型模式,这个类型的设计模式总结出了 类、对象之间的经典交互方式,将类、对象的行为和使用解耦了,花式的去使用对象的行为来完成特定场景下的功能。
83 0
我学会了,迭代器模式
|
Java uml 容器
被用到炉火纯清的迭代器模式
迭代器模式(Iterator),提供一种方法顺序访问一个聚合对象中的各种元素,而又不暴露该对象的内部表示。
95 0
被用到炉火纯清的迭代器模式