资讯专栏INFORMATION COLUMN

深入理解迭代器

yagami / 307人阅读

摘要:一,迭代器的原理我们大家都知道迭代器有个方法,分别是下面分别自定义实现个方法解释迭代器的原理。

一,迭代器的原理

我们大家都知道迭代器有3个方法,分别是 hashNext(); next(); remove();,下面分别自定义实现3个方法 解释迭代器的原理。

//数组存储值
    private String [] elem = {"a","b","c"};
    //数组大小
    private int size  = elem.length;
    //定义计数器(指针 游标),在数组里面,0 代表第一个元素,-1 代表一个元素都没有
    private int courser = -1;
    //判断是否有下一个元素
    public boolean hasNext(){
        return courser+1

二,迭代器调用

上面我们将迭代器的3个基本方法分别自定义的写了一遍,我们来考虑迭代器调用的问题,如果每次调用迭代器用一个方法来封装一下 不更加方便一些,不需要重复创建对象,开辟多余的内存空间。

    //创建一个内部类,面向接口编程,使用了一个内部类
    private class MyIter implements Iterator{
    private int courser = -1;
    public boolean hasNext(){
        return courser+1

上面的数组 是一个固定 写死了的,可不可以写一个方法,可以灵活的添加数组元素呢?

//定义一个初始元素只有5个大小的数组
private String [] elem =new String[5];
private String [] elem =new String[5];
    //大小
    private int size  = 0;
    public void add(String ele){
        //如果数组的容量超过了5,这个时候就需要扩容
        if(this.size == elem.length){//说明数组的容量不够
            elem = Arrays.copyOf(elem, elem.length+5);//自定义,想加多少就多少
        }
        elem[size] = ele;
        size++;//实际大小+1
    }

三,迭代器泛型

我们基本上了解了迭代器的一些实现原理,但是迭代器的类型也是固定的,可不可以用泛型来随意操作迭代器的类型呢?

  public class ArrayList implements java.lang.Iterable{
    /**
     * 使用泛型 可以操作多个类型
     */
    //泛型没有数组,所以这里使用Object来接收
    private Object [] elem =new Object[5];
    private int size  = 0;
    public void add(E ele){
        if(this.size == elem.length){
            elem = Arrays.copyOf(elem, elem.length+5);
        }
        elem[size] = ele;
        size++;//实际大小+1
    }
    
    //使用匿名内部类
    public Iteratoriterator(){
        return new Iterator(){//Iterator迭代器接口实现类(匿名)对象
            private int courser = -1;
            public boolean hasNext(){
                return courser+1 list = new ArrayList();
        list.add(1);
        list.add(2);
        for(Integer element:list){
            System.out.println(element);
        }
        //操作String
        ArrayList listStr = new ArrayList();
        listStr.add("as");
        listStr.add("asss");
        for(String str:listStr){
            System.out.println(str);
        }
    }
}

讲到迭代器,有一个接口 叫Enumberation 随便回顾一下,这个接口在jdk1.5之前用的非常的频繁,跟上文讲到的Iterator非常的类似,hasMoreElements() 判断是否有下一个元素,nextElement()获取下一个元素 案列如下:

    Vector vc 
          = new Vector();
    vc.add("a");
    vc.add("b");
    vc.add("c");
    Enumeration en = vc.elements();
    while(en.hasMoreElements()){
        System.out.println(en.nextElement());
    }

StringTokenizer 是Enumberation的子类,实现字符串的分割,但是不支持正则表达式

String emails = 
             "cc@163.com;cc@qq.com;cc@sina.com";
    StringTokenizer str 
         = new StringTokenizer(emails,";");//只支持分隔符,不支持正则表达式
    while(str.hasMoreElements()){
        System.out.println(str.nextElement());
    }

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/64813.html

相关文章

  • 深入理解ES6之《迭代与生成

    摘要:什么是迭代器中创建迭代器如下所示什么是生成器生成器是一种返回迭代器的函数每当招待完一条语句后函数就会自动停止执行关键字可返回任何值或表达式关键字只可在生成器内部使用,在其它地方使用会导致程序抛出语法错误所以下面例子是有错误的可迭代对象具有属 什么是迭代器 ES5中创建迭代器如下所示: function createIterator(items) { var i = 0 retu...

    王军 评论0 收藏0
  • 深入理解ES6之《迭代与生成

    摘要:什么是迭代器中创建迭代器如下所示什么是生成器生成器是一种返回迭代器的函数每当招待完一条语句后函数就会自动停止执行关键字可返回任何值或表达式关键字只可在生成器内部使用,在其它地方使用会导致程序抛出语法错误所以下面例子是有错误的可迭代对象具有属 什么是迭代器 ES5中创建迭代器如下所示: function createIterator(items) { var i = 0 retu...

    myshell 评论0 收藏0
  • 深入理解ES6》笔记——迭代(Iterator)和生成(Generator)(8)

    摘要:迭代器是一种特殊对象,每一个迭代器对象都有一个,该方法返回一个对象,包括和属性。默认情况下定义的对象是不可迭代的,但是可以通过创建迭代器。在迭代器中抛出错误不再执行生成器返回语句生成器中添加表示退出操作。迭代器是一个对象。 迭代器(Iterator) ES5实现迭代器 迭代器是什么?遇到这种新的概念,莫慌张。 迭代器是一种特殊对象,每一个迭代器对象都有一个next(),该方法返回一个对...

    AndroidTraveler 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<