【Java】迭代器的next方法

3 篇文章 0 订阅
2 篇文章 0 订阅

Collection 集合的遍历

概述:Iteration:迭代器,集合的专用遍历方式

  1. Iterator<E> Iterator() 返回在此 collection 的元素上进行迭代的迭代器
  2. boolean hasNext() 如果返回仍有元素可以迭代,则返回 true
  3. E next() 返回迭代的下一个元素

示例代码:

package com.collection.Demo04;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;

public class Test02 {
    //迭代器——属于 集合中专有的
    public static void main(String[] args) {
//        ArrayList<String> arrayList = new ArrayList<String>();
        Collection<String> collection = new ArrayList<String>();
        collection.add("mayikt01");
        collection.add("mayikt02");
        collection.add("mayikt03");
        //之前遍历集合中的数据
//        for (int i = 0; i < collection.size(); i++) {
//            String s = collection.get(i);//ArrayList中是有get(),Collection中没有get()
//            System.out.println(s);
//        }

        //使用迭代器集合遍历
        System.out.println("使用集合中的专有迭代器遍历数据");
        //        System.out.println(iterator.next()+","+iterator.hasNext());//mayikt01,true,调用第1次next(),取出第1个元素
//        System.out.println(iterator.next()+","+iterator.hasNext());//mayikt02,true,调用第2次next(),取出第2个元素
//        System.out.println(iterator.next()+","+iterator.hasNext());//mayikt03,false,调用第3次next(),取出第3个元素
//        System.out.println(iterator.next());//没有第4个元素,报错
        /**
         * next 底层会使用计数器 每次调用 .next()时 计数+1
         * iterator.hasNext()
         * 判断是否可以取出元素,如果可以取出元素 则返回 true 否则 false
         */
        for (String s : collection) {//=>while (iterator.hasNext()){ //如果迭代器 能够获取到元素 返回true
            System.out.println(s);
        }
    }
}

手写Iterator迭代器

MayiktIterator.java 迭代器

package com.collection.Demo04;

import java.util.List;

/**
 * 手写Iterator 迭代器
 * next
 * hasNext
 */
public class MayiktIterator {
    private final List list;

    public MayiktIterator(List list) {
        this.list = list;
    }

    //迭代器 计数器 初始值 0
    private int count = 0;

    public Object next() {//后面学到泛型是可以优化的
        if (list == null) {
            throw new MayiktException("list is null");
        }
        if (count >= list.size()) {
            //说明:集合中 没有继续可以访问到的元素,下标越界了
            throw new MayiktException("无法继续向下获取元素了");
        }
        return list.get(count++);
    }

    public boolean hasNext() { //hasNext() 判断集合中 是否可以继续获取元素 如果能够获取到元素 返回true
//        if (count == list.size()){} //取次数==list.size() 集合中个数 相等

        return count != list.size();

    }
}

MayiktException.java 异常

package com.collection.Demo04;

public class MayiktException extends RuntimeException {
    public MayiktException(String errorMsg){
        super(errorMsg);
    }
}

Test03.java

package com.collection.Demo04;

import java.util.ArrayList;
import java.util.List;

/**
 * 手写迭代器测试
 */

public class Test03 {
    public static void main(String[] args) {
        List<String> list = new ArrayList<String>();
        list.add("mayikt01");
        list.add("mayikt02");
        list.add("mayikt03");
        MayiktIterator mayiktIterator = new MayiktIterator(list);
//        System.out.println(mayiktIterator.next());
//        System.out.println(mayiktIterator.next());
//        System.out.println(mayiktIterator.next());
//        System.out.println(mayiktIterator.next());//报错
        while (mayiktIterator.hasNext()){
            System.out.println(mayiktIterator.next());
        }
    }
}

ArrayList存入数据保证有序性

package com.collection.Demo04;

import java.util.ArrayList;

public class Test01 {
    public static void main(String[] args) {
        /**
         * List接口下 实现类 ArrayList LinkedList 存入数据 都是保证有序性
         * 存入数据可以重复
         */
        ArrayList<String> arrayList = new ArrayList<>();
        for (int i = 0; i < 10; i++) {
            arrayList.add("i:" + i);
        }
        for (String str : arrayList) {
            System.out.println(str);//有序性
        }

        arrayList.add("数据可以重复");
        arrayList.add("数据可以重复");
        arrayList.add("数据可以重复");
    }
}

下一篇文章:集合中独有的方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值