java 集合解析(一)collection和Iterable

java 集合解析(一)collection和Iterable

先上一张从网上找的图,将集合也是概括的挺详细的
这里写图片描述

从图里可以看出collection是java中的一个顶层接口,list,queue和set继承了collection接口。
既然要说的是collection,我们打开源码collection看一下。

public interface Collection<E> extends Iterable<E> 

不是说Collection是顶层接口吗,怎么又继承了Iterable,这个又是个什么鬼,照例打开源码瞧一瞧

public interface Iterable<T> {

    Iterator<T> iterator();

    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接口。
那这个default是什么鬼,怕是看的假源码,接口中也可以写方法了吗。

其实default是java1.8中新增添的方法,当我们对接口进行增加方法的时候,就必须对其所有的实现类添加方法,耗费大量的时间,default关键字允许我们在接口中对函数进行实现,这里也不难理解了。

因为是default是java8中新添的方法,所以这些也是java8中的方法,添加了foreach方法,有兴趣的可以去了解下。

至于为什么实现了Iterable,而不直接继承于iterator,iterator是一个迭代器接口,当我们继承这个接口时候就意味着我们需要不论什么时候都要实现里面的next,hasnext等方法,同时在collection中有的时候不需要使用iterator,所以设计一个持有iterator接口的Iterable,避免了代码的冗杂,同时也提高了效率。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值