博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
深入理解迭代器
阅读量:6233 次
发布时间:2019-06-21

本文共 2648 字,大约阅读时间需要 8 分钟。

一,迭代器的原理


我们大家都知道迭代器有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 Iterator
iterator(){ 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());    }

转载地址:http://uxxna.baihongyu.com/

你可能感兴趣的文章
html5: Drag and Drop
查看>>
解决微信多域名授权微信网页授权订阅号借用授权无公众号代授权
查看>>
Python日志产生器
查看>>
Java——内部类(inner class)
查看>>
【NOI 2009】诗人小G
查看>>
(九)ASP.NET自定义用户控件(2)
查看>>
真机调试出现错误 No provisioning profiles found: No non–expired provisioning profiles were f...
查看>>
窗体的置顶显示
查看>>
第五次作业(团队作业)
查看>>
URL重定向之一.htaccess文件和AllowOverride指令
查看>>
Dedecms去掉网站底部powered by dedecms 的方法
查看>>
2017中国大学生程序设计竞赛-哈尔滨站 A - Palindrome
查看>>
数组求和函数
查看>>
Pos管理类库的第三方库
查看>>
在局域网中通过端口号扫描服务器IP
查看>>
在android 采用 android junit test 测试注意
查看>>
【转】网页禁止后退键BackSpace的JavaScript实现(兼容IE、Chrome、Firefox、Opera)
查看>>
登录界面点击登录后如何延迟提示成功的div的显示时间并跳转
查看>>
MySQL 数据库死锁
查看>>
关于try catch
查看>>