java集合知识归纳(二)-- ArrayList

本文详细介绍了迭代器的基本概念及其在ArrayList中的应用。通过分析迭代器接口的方法,展示了如何自定义实现迭代器功能,并探讨了多线程环境下集合的安全使用策略。

开发板推荐:天空星STM32F407VET6开发板

超高性价比 STM32主控 | 超高主频 | 一板兼容百芯 | 比赛神器 | 沉金彩色丝印


数据访问的问题

将对数据的遍历方法封装再聚合类中,不利于扩展,并且需要暴露聚合类内部的表示,让数据变得不安全,而且增加的开发者的负担


因此出现了伟大的迭代器!!克服了以上缺点

一、ArrayList中迭代器的介绍

让我们先来看看iterator接口实现的方法

public interface Iterator<E> {
    //判断集合是否还有元素  返回true表示还有元素 返回false表示集合中没有元素
    //一般对集合的访问通过while(hasNext())判断是否还需要遍历
    boolean hasNext();

   //获取集合中遍历的当前元素
    //一般先判断是否存在元素hasNext,判断有元素在调用next获取元素,需要进行循环交替遍历集合中所有元素
    E next();
	
    //删除集合中的元素
    void remove();
}

使用场景

  //第一步:通过集合调用iterator()获取迭代器实例
        Iterator <Integer> iterator1 = list.iterator();
        //第二步:首先判断集合中是否存在元素,通过where来循环遍历
        while (iterator1.hasNext()) {
            //第三步:如果还存在元素,就通过next()获取当前的元素
            Integer value  = iterator1.next();
        }
  • 注意:正确的遍历集合是一个hasNext和一个next方法进行循环交替遍历,切勿一个hashNext中包含多个Next的调用

让我们来思考如何自定义来实现集合的遍历

  1. 集合本身需要具有遍历集合的方法,即集合中需要有iterator()方法,首先集合定义是需要实现或者继承iterable接口的
  2. 对于iterator()方法的实现,返回类型是Iterator对象
  3. 需要实现一个Iterator类型的对象,实现给接口中的三个方法

答案如下

/**
 * desc:自定义ArrayList实现迭代器功能
 */

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

public class DIYArrayList<T> implements Iterable<T> {
    private T[] element;
    private int size;
    public DIYArrayList(){
        this(10);
    }

    public DIYArrayList(int n){
        element=(T[])new Object[n];
        size=0;
    }
    private boolean isFull(){
        return size==element.length;
    }
    private void expend(){
        element=Arrays.copyOf(element, element.length+element.length>>1);
    }
    public void add(T elem){
        if(isFull()){
            expend();
        }
        element[size++]=elem;
    }
    private boolean isEmpty(){
        return size==0;
    }
    public void remove(T value){
        if(isEmpty()){
            return;
        }
        element[size]=null;
        size--;
    }


    //提供了一个迭代器的方法
    @Override
    public Iterator <T> iterator() {
        return new DIYItr();
    }
    
    
    class DIYItr implements Iterator<T>{

        @Override
        public boolean hasNext() {
            return false;
        }

        @Override
        public T next() {
            return null;
        }

        @Override
        public void remove() {

        }
    }
}

多线程下如何使用集合

1、在多线程下会提供线程安全的集合操作类
2、创建安全的容器来操作:Collections.synchronizedList(list)方法操作

开发板推荐:天空星STM32F407VET6开发板

超高性价比 STM32主控 | 超高主频 | 一板兼容百芯 | 比赛神器 | 沉金彩色丝印

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值