java集合源码学习(一)Iterator、Iterable

本文深入解析了Java集合框架中的核心接口Iterator和Iterable的工作原理及应用。详细介绍了Iterator接口的hasNext、next、remove方法和forEachRemaining方法,以及Iterable接口的iterator、forEach和spliterator方法。此外还探讨了default方法的意义及其在接口中的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在学习集合源码之前,我们应对集合家族有一个清晰的理解。

一、Iterator迭代器

public interface Iterator<E> {

    boolean hasNext();

 
    E next();

 
    default void remove() {
        throw new UnsupportedOperationException("remove");
    }

  
    default void forEachRemaining(Consumer<? super E> action) {
        Objects.requireNonNull(action);
        while (hasNext())
            action.accept(next());
    }
}

hasnext():判断集合是否有下一个元素返回布尔值

next():获取迭代的下一个元素

remove() : 从迭代器指定的集合中移除迭代器返回的最后一个元素。

forEachRemaining(Consumer<? super E> action) : jdk8为Iterator新增的默认方法,该方法可以使用Lambda表达式来遍历集合元素

二、Iterable<T>

public interface Iterable<T> {
   
    Iterator<T> iterator();

    //传入一个Consumer类参数,通过调用Consumer里面的accept方法进行遍历    
    default void forEach(Consumer<? super T> action) {
        Objects.requireNonNull(action);
        for (T t : this) {
            action.accept(t);
        }
    }

    
    default Spliterator<T> spliterator() {
        return Spliterators.spliteratorUnknownSize(iterator(), 0);
    }
}

iterator() : 方法该方法没有参数,返回一个能够遍历容器的迭代器 Iterator<T> 。实现Iterable需要重写。

forEach(Consumer<? super T> action) :循环容器中的元素,并对每个元素进行 action 操作,容器中不能有空元素,否则或抛出 NullPointerException 指针异常。

spliterator():spliterator 方法没有参数,返回一个 Spliterator<T> 对象,Spliterator接口是1.8新加的接口,字面意思可分割的迭代器,不同以往的iterator需要顺序迭代,Spliterator可以分割为若干个小的迭代器进行并行操作,既可以实现多线程操作提高效率,又可以避免普通迭代器的fail-fast机制所带来的异常。
 

default的作用

default的意义

  • Default 方法带来的好处是,往接口新增一个Default 方法,而不破坏现有的实现架构。
  • Default方法可以认为是Lambda表达式和JDK类库之间的桥梁。引入Default方法的主要目的是为了升级标准JDK接口,另外也是为了我们最终能在Java8中顺畅使用Lambda表达式。

@contract注解

两个属性

  • value 属性-包含-描述-调用参数-和返回值-之间的-因果关系-的 contract 子句。
  • pure 属性-适用于-不更改-其对象状态-的方法,但只返回一个新值。该属性可以-用作-“忽略方法-调用的-结果”检查的-提示,以-指示-在调用时-应该-使用方法的-返回值。它是假(false)(默认情况下),也可以为真(true)。


@NotNull 限制必须不为null

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值