Collection接口介绍

Collection接口介绍

  1. 一个Collection表明一组对象,是集合体系中的根接口。一些容许有重复的元素一些不容许,一些有顺序一些没有顺序。JDK不提供此接口具体类的直接实现,只会有子接口和抽象类的实现(如List和Set),此接口一般用于传递集合和须要最大通用性时使用(如以接口做为形参时);
  2. 全部此接口的实现类都应该提供一个无参构造器和一个以Collection和参数的有参构造器。这并非语法上强制规定的而是java规范规定的,由于接口中不能包含构造器;
  3. 此接口实现类若是不支持某个方法,能够抛UnsupportedOperationException;
  4. 不一样实现类对其所包含的元素可能会有不一样的限制,若有的不容许添加null,有的对元素类型有限制。试图添加不符合条件的元素可能会抛出NullPointerException或ClassCastException,试图查询一个不符合条件的元素会抛出异常或返回false,这取决于不一样的实现;
  5. 同步策略由每一个实现类本身决定;

查询操做:java

/**
     * 返回集合中元素的个数,若是元素个数超过Integer.MAX_VALUE,则返回Integer.MAX_VALUE
     */
    int size();
    /**
     * 判断集合中元素是否为空
     */
    boolean isEmpty();
    /**
     * 判断集合中是否包含指定元素
     */
    boolean contains(Object o);
    /**
     * 返回一个迭代器,不保证迭代器中元素的顺序,除非改集合实现类自己提供了保证
     */
    Iterator<E> iterator();
    /**
     * 将集合转换为数组,数组中元素的顺序与该集合产生迭代器中的顺序一致
    *这个方法是数组和列表之间的桥梁
     */
    Object[] toArray();
    /**
     * 返回一个集合元素类型的数组。若是集合知足指定的数组而且有足够的空间,则在其中返回此集合
     *不然返回此集合大小的新数组。
     *若是集合有序,那么返回此集合迭代器遍历顺序的数组
     *若是数组大小比集合元素多,那么在数组知足集合元素后在末尾设置为null
     *若是在数组中元素的类型不是集合中元素类型的超类,那么抛ArrayStoreException异常
     *若是指定数组为空,则抛出NullPointerException
     */
    <T> T[] toArray(T[] a);

 

修改操做:数组

/**
     * 确保此集合包含特定的元素类型。 若是此集合增长元素成功返回true。 若是此集合不容许有重复元素而且已经包含所传参数,那么返回false
     * 支持此操做的集合可能会限制向该集合添加哪些元素。特别的,有些集合会拒绝null元素,有些会对要增长的元素强加一些限制。
     * Collection实现类应该在文档中明确指出全部的限制。
     * 若是集合以除已经包含元素以外的任何缘由拒绝添加特定元素,则必须抛出异常,(而不是返回false)。 这保留了集合在此调用返回后始终包含指定元素的不变式。
     */
    boolean add(E e);

    /**
     * 若是集合中包含此元素,则移除该元素; 若是集合中包含多个这样的元素,则移除知足(o==null?e==null:o.equals(e))的元素;
     * 若是集合因该方法的调用而发生改变,则返回true; 若是指定元素的类型和集合不相容,抛出ClassCastException异常(可选的限制条件);
     * 若是指定元素是null而且这个集合不容许null元素存在,那么抛出NullPointerException异常(可选的限制条件)
     * 若是此集合不支持remove操做那么抛出UnsupportedOperationException异常(可选的限制条件)
     */
    boolean remove(Object o);

 

批量操做:多线程

/**
     * 若是this集合包含指定集合的全部元素,返回true
     * 若是该集合中元素的类型和this集合不相容,抛出ClassCastException异常(可选的限制条件)
     * 若是该集合中元素有一个或多个null而且this集合不容许null元素存在,那么抛出NullPointerException异常(可选的限制条件)
     */
    boolean containsAll(Collection<?> c);

    /**
     * 将指定集合的全部元素到this集合中(可选的操做)。 若是指定的集合在操做进行时被修改了,那么此操做行为未定义。
     * (这意味着若是指定的集合是这个集合,而且这个集合是非空的,那么这个调用的行为是未定义的。) 若是调用结果改变了this集合返回true 若是
     * addAll操做不被此集合支持,那么抛出UnsupportedOpertaionException异常
     * 若是指定集合包含了空元素而this集合不容许有空元素,那么抛出NullPointerException异常
     * 若是this集合阻止hiding集合元素类型添加,那么抛出ClassCastException异常
     * 若是指定集合的元素的某些属性阻止将其添加到此集合,则抛出IllegalArgumentException
     * 因为插入限制,若是不是全部元素均可以在此时添加,则抛出IllegalStateException异常
     */
    boolean addAll(Collection<? extends E> c);

    /**
     * 移除此集合中全部的包含在指定集合中的元素(可选的操做)。调用过此函数以后,那么此集合和指定集合将再也不包含相同元素。 若是此集合因调用而更改那么返回true
     * 若是此集合不支持removeAll方法,则抛出UnsupportedOperationException
     * 若是集合中一个或多个元素的类型与指定集合不兼容,则抛出ClassCastException(可选的操做)
     * 若是该集合包含一个或多个空元素,且指定的集合不支持空元素(optional),或者指定的集合为空,则抛出NullPointerException异常
     */
    boolean removeAll(Collection<?> c);

    /**
     * 移除此集合中全部符合给定Predicate的元素。在迭代期间或由Predicate引起的错误或运行时异常将被转发给调用方
     * 默认实现使用其迭代器遍历集合的全部元素。每个匹配的元素使用iterator.remove()来移除。
     * 若是集合的iterator不支持移除将会抛出UnsupportedOperationException异常
     * 指定过滤器为空,抛出NullPointerException 若是移除操做不支持,抛出UnsupportedOperationException异常
     */
    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;
    }

    /**
     * 只保留此集合中包含在指定集合中的元素(可选的操做) 也就是说,移除此集合中不包含在指定集合中的全部元素。 若是此集合改变了返回true
     * 若是此集合不支持retainAll,则抛出UnsupportedOperationException异常
     * 若是集合中一个或多个元素的类型与指定集合不兼容,则抛出ClassCastException(可选的操做)
     * 若是该集合包含一个或多个空元素,且指定的集合不支持空元素,或者指定的集合为空,抛出NullPointerException(可选的操做)
     */
    boolean retainAll(Collection<?> c);

    /**
     * 移除此集合中的全部元素,此方法调用后,此集合应该为空 若是此集合clear操做不支持将会抛出UnsupportOperationException异常。
     */
    void clear();

 

比较和hash:函数

    boolean equals(Object o);

    int hashCode();

 

 默认方法:ui

/**
     * 默认方法, 多线程中用的到,暂时不作讨论
     */
    default Spliterator<E> spliterator() {
        return Spliterators.spliterator(this, 0);
    }

    default Stream<E> stream() {
        return StreamSupport.stream(spliterator(), false);
    }

    default Stream<E> parallelStream() {
        return StreamSupport.stream(spliterator(), true);
    }

参考:https://www.jianshu.com/p/ef2990140d05this

相关文章
相关标签/搜索