源码分析-java-collection接口

以下内容是api资料的简单汇总:

API概述

Collection接口是集合继承的根,一个集合表示一组对象,即元素,的集合。Collection是一个抽象层次比较高的类,java没有提供直接的实现,通常都是对子类提供实现。

一般的Collection实现应该提供两种标准的构造器:
一个是无参构造器,用于创建一个空集合
另一个是有参的构造器,参数为集合内集合内元素。(当然这个方法并没有办法提供强制类型转换,因为接口没办法包括构造器,但是所有的通用Collection实现都应该遵循)

Collection包含一些有破坏性的方法,也就是说在使用这些方法的时候会修改内部元素。
如果这个Collection实现不支持这类操作必须丢出UnsupportedOperationException
如果这个操作无效但是不会产生副作用,也应该丢出UnsupportedOperationException,但是不强制丢出。

一些collection实现对于元素类型有限制,例如有些不允许空元素或者限制的类型。
如果一个不合格的元素需要插入,应该丢出一个unchecked 异常,通常是NullPointerException 或者ClassCastException。
更一般的情况,其他操作一个不合格数,导致一个不合格数插入集合应该丢出一个集合或者成功。这取决于具体的实现如何选择。通常这类一次被标记为可选的(optional)

some implementations will exhibit the former behavior and some will exhibit the latter. 原文这句话没看懂。

对于集合的同步策略来说,如果没有来实现的同步策略,默认情况下回导致被其他线程被修改。可以通过集合的方法修改或者通过迭代器修改。

很多Collection框架接口定义了equals方法。但是Collection没有提供任何的实现,通常都是由子类的实现提供,例如o==null?e==null:o.equals(e))是比较典型的写法。但是也要根据具体情况来看。

需要提醒的一点是对于有些遍历的操作,可能会由于集合指向它自己而导致一些异常而失败,比如说clone(), equals() hasCode()和toString()。实现可以有选择性的实现这个类但是大多数实现并没有这么做。

源码分析:

源码上没有找出来任何需要特别注意的地方:
整个源码都只有声明,也没有声明异常,异常都是根据实现来抛出的。

整个Collection只包含了一个实现:

    default boolean removeIf(Predicate<? super E> filter) {
        Objects.requireNonNull(filter);
        boolean removed = false;
        final Iterator<E> each = iterator();
        while (each.hasNext()) {
            if (filter.test(each.next())) {
                each.remove();
                removed = true;
            }
        }
        return removed;
    }

这里用了1.8版本之后的才有的Predicate接口,filter.test用来测试是否符合某个lamda式子。
这里用到策略模式(应该是。。)Predicate类当然也没有具体实现test。这个需要看具体实现来判断怎么做合适。
另外提醒下default表示包内可见。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值