Java集合系列---Collection源码解析及整体框架结构

集合的整体框架结构及依赖关系

在这里插入图片描述

1.Collection

public interface Collection<E> extends Iterable<E> {}

Collection是一个高度抽象出来的集合,包含了集合添加,删除等基本操作,主要分支为List,Set,Queue.

// Collection的API
abstract boolean         add(E object)
abstract boolean         addAll(Collection<? extends E> collection)
abstract void            clear()
abstract boolean         contains(Object object)
abstract boolean         containsAll(Collection<?> collection)
abstract boolean         equals(Object object)
abstract int             hashCode()
abstract boolean         isEmpty()
abstract Iterator<E>     iterator()
abstract boolean         remove(Object object)
abstract boolean         removeAll(Collection<?> collection)
abstract boolean         retainAll(Collection<?> collection)
abstract int             size()
abstract <T> T[]         toArray(T[] array)
abstract Object[]        toArray()

注:其中的 Iterator iterator()方法会返回一个Iterator对象,用来遍历集合。而foreach其实是Iterable中的一个方法,用来遍历集合

default void forEach(Consumer<? super T> action) {
        Objects.requireNonNull(action);
        for (T t : this) {
            action.accept(t);
        }
    }

在Java8之后还新增了Stream操作集合,因为用到的还比较少,这里就先不做总结。

2 Iterable

Iterable是Java集合框架中最顶级的接口,但是它的子接口只有Collection一个,当时在阅读源码的时候就很奇怪为什么不把它的方法直接合并到Collection中,或者直接继承Iterator。。。
Api:

修饰符和返回值方法名描述
Iteratoriterator()返回一个内部元素为T类型的迭代器
default voidforEach(Consumer<? super T> action)对内部元素进行遍历,并对元素进行指定的操作
default Spliteratorspliterator()创建并返回一个可分割迭代器

Iterator接口的核心方法next()或者hasNext()是依赖于迭代器的当前迭代位置的。
如果Collection直接继承Iterator接口,势必导致集合对象中包含当前迭代位置的数据(指针)。当集合在不同方法间被传递时,由于当前迭代位置不可预置,那么next()方法的结果会变成不可预知。而Iterable则不然,每次调用都会返回一个从头开始计数的迭代器。
多个迭代器是互不干扰的。

3 Iterator

Iterator是Java集合框架中主要用于迭代访问Collection集合中的元素,即迭代器。
注意:但是在使用Iterator访问Collection中的元素时,Collection中的元素不能被改变,只能通过remove()方法删除上一次next()方法返回的集合元素才可以。

图片从转载https://blog.csdn.net/u010887744/article/details/50575735

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值