• JDK 集合 Collection


    一、继承关系图

    二、接口方法说明

    Collection接口继承自Iterable接口,它是集合树的最顶层节点,它总共定义了15个方法:

    //返回集合中元素的个数

    int size();

    //判断集合是否为空

    boolean isEmpty();

    //判断集合中是否包含指定对象

    boolean contains(Object o);

    //返回集合的迭代器

    Iterator<E> iterator();

    //将集合转换成数组

    Object[] toArray();

    //按照泛型将集合转换成数组

    <T> T[] toArray(T[] a);

    //在集合中增加指定元素

    boolean add(E e);

    //从集合中移除指定元素

     boolean remove(Object o);

    //判断集合是否包含了指定集合的所有元素

     boolean containsAll(Collection<?> c);

    //将指定集合的所有元素增加到集合中

     boolean addAll(Collection<? extends E> c);

    //从集合中移除指定集合的所有元素

    boolean removeAll(Collection<?> c);

    //只保留指定集合中包含的元素

    boolean retainAll(Collection<?> c);

    //移除集合中所有的元素

     void clear();

    //将集合与指定对象进行比较

    boolean equals(Object o);

    //返回集合的hashcode值

    int hashCode();

    三、重点继承实现子类

     * @author  Josh Bloch
     * @author  Neal Gafter
     * @see     Set
     * @see     List
     * @see     Map
     * @see     SortedSet
     * @see     SortedMap
     * @see     HashSet
     * @see     TreeSet
     * @see     ArrayList
     * @see     LinkedList
     * @see     Vector
     * @see     Collections
     * @see     Arrays
     * @see     AbstractCollection
     * @since 1.2

    四、源码分析

      1 public interface Collection<E> extends Iterable<E> {
      2     // Query Operations    原注释,不明意义
      3 
      4     //定义size方法,应返回size大小,最大值为Integer.MAX_VALUE
      5     int size();
      6 
      7     //定义isEmpty方法,用于返回是否为空
      8     boolean isEmpty();
      9 
     10     //定义contains方法,判断一个obj是否属于此集合
     11     boolean contains(Object o);
     12 
     13     //定义迭代器方法,返回一个迭代器对象
     14     Iterator<E> iterator();
     15 
     16     //定义转换为转换Obj数组的方法,返回一个obj数组
     17     Object[] toArray();
     18 
     19     //定义转换为泛型T数组的方法,返回一个指定泛型的数组
     20     <T> T[] toArray(T[] a);
     21 
     22     //定义add方法,添加一个元素e,并返回添加成功标志
     23     boolean add(E e);
     24 
     25     //定义remove方法,移除一个元素obj,并返回移除元素成功标志
     26     boolean remove(Object o);
     27 
     28     //定义containsAll方法,判断是否包含集合实例对象c
     29     boolean containsAll(Collection<?> c);
     30 
     31     //定义addAll方法,添加集合实例对象c到本实例中
     32     boolean addAll(Collection<? extends E> c);
     33 
     34     //定义removeAll方法,从本实例中移除集合实力对象c
     35     boolean removeAll(Collection<?> c);
     36 
     37 
     38     /**
     39      * jdk8新增
     40      * 大意为:
     41      * 定义removeIf方法,该方传递参数为函数式,传递内容是一个接口类型,该接口类型
     42      * 定义为一个filter函数,该函数用于传递给Objects.requireNonNull判断,然后调用
     43      * 迭代器,将满足该定义的filter的本实例中的元素移除
     44      * @since 1.8
     45      */
     46     default boolean removeIf(Predicate<? super E> filter) {
     47         Objects.requireNonNull(filter);
     48         boolean removed = false;
     49         final Iterator<E> each = iterator();
     50         while (each.hasNext()) {
     51             if (filter.test(each.next())) {
     52                 each.remove();
     53                 removed = true;
     54             }
     55         }
     56         return removed;
     57     }
     58 
     59     //定义retainAll方法,取本例与集合实例c的交集,判断交集元素数量是否大于0
     60     boolean retainAll(Collection<?> c);
     61 
     62     //定义clear方法,清除本例集合中的所有元素
     63     void clear();
     64 
     65     // Comparison and hashing    原注释,不明意义
     66 
     67     //不解释
     68     boolean equals(Object o);
     69 
     70     //定义hashCode方法,获取hashCode标记的方法
     71     int hashCode();
     72 
     73     /**
     74      *jdk8新增
     75      *大意为:
     76      *将迭代器拆分,重写自Iterable接口,从已知元素数量的本例中返回拆分后的迭代器
     77      *此方法返回的为本类本身
     78      *子类可能重写迭代器拆分,将一个集合的迭代拆分为多个集合的迭代交由多个线程
     79      * @since 1.8
     80      */
     81     @Override//重写父类
     82     default Spliterator<E> spliterator() {
     83         return Spliterators.spliterator(this, 0);
     84     }
     85 
     86     /**
     87      * jdk8新增
     88      * 大意为:
     89      * 将默认的迭代器拆分后的结果,聚合为流,该流并非io中的流,
     90      * 是一种类似于数据排序操作流
     91      * @since 1.8
     92      */
     93     default Stream<E> stream() {
     94         return StreamSupport.stream(spliterator(), false);
     95     }
     96 
     97     /**
     98      * jdk8新增
     99      * 同上,但是具体其他的实现中,因为可并行,所以可能是线程不安全的
    100      *
    101      * @since 1.8
    102      */
    103     default Stream<E> parallelStream() {
    104         return StreamSupport.stream(spliterator(), true);
    105     }
    public interface Iterable<T> {
    
        //定义iterator方法,返回迭代器
        Iterator<T> iterator();
    
        /**
         * jdk8新增
         * 大意为:
         * 根据action调用Objects.requireNonNull进行过滤
         * 过滤结果调用for循环取出,
         * @since 1.8
         */
        default void forEach(Consumer<? super T> action) {
            Objects.requireNonNull(action);
            for (T t : this) {
                action.accept(t);
            }
        }
    
        /**
         * jdk8新增
         * 大意为:
         * 分离迭代器,将未知大小的迭代器进行拆分,返回拆分的迭代器本身
         *
         * @since 1.8
         */
        default Spliterator<T> spliterator() {
            return Spliterators.spliteratorUnknownSize(iterator(), 0);
        }
    }

    五、Collection是所有集合的基类,因此接口中抽象的操作都是集合的共性操作

    集合作为容器,其体系中的所有集合都包括了:

      大小(size),判空(isEmpty),添加元素(add),删除元素(remove),是否包含(contains)

      转换数组(toArray),清空(clear),遍历与迭代(forEach(父接口中),iterator)

      是否相同(equals),哈希(hashCode),求交集(retainAll)

      除此之外,提供了java8的分离接口,聚合接口,为了大容量集合的多线程操作

     

    
    
  • 相关阅读:
    xhtml中隐藏滚动条
    一个题目包括70种网页制作常用技巧 (转)
    Oracle 数据类型映射 (ADO.NET)
    oracle数据库 数据类型
    VisualSVN Server的配置和使用方法
    oracle 权限管理
    项目管理实践【三】每日构建【Daily Build Using CruiseControl.NET and MSBuild】
    showModalDialog和showModelessDialog使用心得
    Bug跟踪管理【Bug Trace and Management】
    开发WAP站点之使用PC电脑浏览器访问WAP手机站点 (转)
  • 原文地址:https://www.cnblogs.com/yuarvin/p/13528371.html
Copyright © 2020-2023  润新知