JDK 1.8 集合概览

一、类图

       JDK 1.8 集合概览_第1张图片

二、分析

       a.  Collection 接口继承了 Iterable 接口,原生带有迭代能力(包括普通迭代以及可分割并行迭代)

       b.  Collection 下设具体集合接口 Set、List,抽象类 AbstractCollection

       c.  Collection size() 返回值为整型,因此有效处理范围不超过 Integer.MAX_VALUE

            超过范围怎么办?抛出 OutOfMemoryError 

    /**
     * Returns the number of elements in this collection.  If this collection
     * contains more than Integer.MAX_VALUE elements, returns
     * Integer.MAX_VALUE.
     *
     * @return the number of elements in this collection
     */
    int size();

      d.   Collection toArray 的用法示例

String[] y = x.toArray(new String[0]);  // x 是存储 String 的集合,参数只是为了表明类型

     e.   jdk 1.8 开始支持 Stream 操作了

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

     f.  List 有序可重复,Set 无序不重复,List的具体实现包含数组和链表两种

         List 排序,先转为 Array,再调用的 Arrays.sort() 

    default void sort(Comparator c) {
        Object[] a = this.toArray();
        Arrays.sort(a, (Comparator) c);
        ListIterator i = this.listIterator();
        for (Object e : a) {
            i.next();
            i.set((E) e);
        }
    }

         List 使用 ListIterator 迭代器,按顺序迭代

    g.  Set 没有 sort 方法(无序),但 SortedSet 有序

    h.  contains 方法是用迭代的方式查找的

     i.  RandomAccess 接口定义是空的,只是帮助用来检查是否支持随机访问  

     j.  随机访问(下标访问)快于迭代(Iterator)访问

this loop:
 *


 *     for (int i=0, n=list.size(); i < n; i++)
 *         list.get(i);
 *

 * runs faster than this loop:
 *

 *     for (Iterator i=list.iterator(); i.hasNext(); )
 *         i.next();
 *

     k.  AbstractList 随机访问,AbstractSequentialList 顺序访问

      l.  subLIst 代理 back list,subList 改变也会影响原 list

    m.  Queue : add/remove/element (are)抛异常,offer/poll/peek (opp)返回值

你可能感兴趣的:(Java)