iterator迭代器

本文详细介绍了Java中遍历集合的三种常见方法:传统for循环遍历、增强型foreach循环遍历以及使用Iterator迭代器遍历。通过示例代码展示了如何在ArrayList中实现这些遍历方式,并解释了它们的工作原理。
摘要由CSDN通过智能技术生成

Java的三种遍历方式

1、传统的for循环遍历

遍历者自己在集合外部维护一个计数器,然后依次读取每一个位置的元素,当读取到最后一个元素后,停止。主要就是需要按元素的位置来读取元素。

2、增强型foreach循环遍历

foreach就是增强for循环。
foreach内部也是采用了Iterator的方式实现,只不过java编译器帮我们实现了,也是要继承Iterable接口的

3、Iterator迭代器遍历

但凡实现了collection接口的子类都可以获取迭代器

两个重要的方法:

  • iterator.hasNext:进行判断,判断是否还有下一个元素
@Override
        public boolean hasNext() {
            return index !=elementData.length;
        }
  • iterator.next::向下移动,同时把指向的元素返回回来
@Override
        public E next() {

            return (E) elementData[index++];
        }

在这里插入图片描述

在这里插入图片描述

package com.zzx.alg.structs.array;

import java.util.Arrays;
import java.util.Collection;
import java.util.Iterator;

public class ArrayList<E> implements Iterable<E>{
     /*数组底层逻辑实现*/
     private Object[] elementData;

     public ArrayList(int capacity){
         /*对数组进行初始化操作*/
         elementData = new Object[capacity];
     }

     /*添加一个元素*/
     public boolean add(E element){
        /*添加元素都是在数组的最后面添加的*/
        int size = elementData.length;
        //这里需要扩容,每添加一个元素的时候,扩容+1;
         int newCapacity = size+1;
         elementData = Arrays.copyOf(elementData,newCapacity);
        elementData[size] = element;
        return true;
     }

     /*取出指定位置的元素*/
     public E get(int index){
         return (E) elementData[index];
     }

     /*获取数组的大小*/
     public int size(){
         return elementData.length;
     }

     /*z替换指定位置的元素一个元素,返沪放入之前的元素*/
     public E set(int index , E element){
         E oldElement = (E) elementData[index];
         elementData[index] = element;
         return oldElement;
     }


    public static void main(String[] args) {
        ArrayList<String> zzxArrayList = new ArrayList<>(10);
        zzxArrayList.set(1,"1");
        zzxArrayList.add("111");
        zzxArrayList.forEach(s -> {
            System.out.println(s);
        });
        /*Iterator iterator = zzxArrayList.iterator();
        while (iterator.hasNext()){
            Object obj = iterator.next();
            System.out.println("obj:"+obj);
        }*/

        /*for(String  list:zzxArrayList){
            System.out.println(list);
        }*/
    }

    @Override
    public Iterator<E> iterator() {
        return new zzxIterator();
    }

    class zzxIterator implements Iterator<E>{
        int index=0;
        @Override
        public boolean hasNext() {
            return index !=elementData.length;
        }

        @Override
        public E next() {

            return (E) elementData[index++];
        }
    }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

仰望星空的鑫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值