迭代器Iterator的简单实现

本文介绍了Java中如何使用Iterator迭代器遍历Collection接口的子类容器。通过迭代器的三个核心方法,实现对容器内部元素的访问。同时,讨论了迭代器的改进方案,包括将迭代器作为局部内部类来提高代码的封装性。
摘要由CSDN通过智能技术生成

一、一个简单使用 Iterator 迭代器的代码

 List list= new ArrayList();
 list.add("aaa");
 list.add("bbb");
 list.add("ccc");
 //(1)通过循环遍历List
 for(int i=0;i<list.size();i++){
    System.out.println(list.get(i));
 }
 //(2)通过迭代器遍历List
 for(Iterator it= list.iterator(); it.hasNext(); ){
    String str = (String) it.next();
    System.out.println(str);
 }


二、理解 Iterator 的内部原理

1、所有实现了Collection接口的容器类,都有一个iterator方法,用以返回一个实现了Iterator接口的对象。
2、Iterator对象称作 迭代器 ,用以方便的实现对容器内部元素的遍历操作。
3、Iterator接口定义了如下方法:

boolean hasNext();    判断是否有元素没有被遍历
Object next();    返回游标当前位置的元素,并将游标移动到下一个位置
void remove();    删除游标左面的元素(刚刚遍历完的那个元素),在执行完next之后该操作只能执行一次


4、几种实现方法(逐渐改进...)

(1)简单实现迭代器的三大函数

public class IteratorImp {
       private String[] elem={"a","b","c","d"};
       private int size = elem.length;
       
       
       public int size(){
              return size;
       }
       
       //计数器:指针、游标, 指向当前访问过的元素
       private int coursor = -1;
       
       //判断是否存在下一个
       public boolean hasNext(){
              return (coursor+1)<size;
       }
       
       //获取下一个
       public Object next(){
              coursor++;
              return elem[coursor];
       }
       
       //删除下一个
       public void remove(){
              //移动数组的元素
              System.arraycopy(elem, coursor+1, elem, coursor, size-coursor-1);
              this.size--;
              //退回上一个访问的元素,即可实现多次删除
              this.coursor--;
       }
       
       public static void main(String[] args) {
              // TODO Auto-generated method stub
              IteratorImp it =new IteratorImp();
              while(it.hasNext()){
                     System.out.println((String) it.next());
              }
              System.out.println("总共有"+it.size()+"个元素!");
       }
}

(2)改进版1:将这三个方法封装在一个 非静态内部类中
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值