一、类图

       JDK 1.8 集合概览

二、分析

       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 <tt>Integer.MAX_VALUE</tt> elements, returns
     * <tt>Integer.MAX_VALUE</tt>.
     *
     * @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<E> stream() {
        return StreamSupport.stream(spliterator(), false);
    }

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

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

    default void sort(Comparator<? super E> c) {
        Object[] a = this.toArray();
        Arrays.sort(a, (Comparator) c);
        ListIterator<E> 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:
 * <pre>
 *     for (int i=0, n=list.size(); i &lt; n; i++)
 *         list.get(i);
 * </pre>
 * runs faster than this loop:
 * <pre>
 *     for (Iterator i=list.iterator(); i.hasNext(); )
 *         i.next();
 * </pre>

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

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

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

相关文章:

  • 2021-12-18
  • 2021-11-15
  • 2021-10-09
  • 2021-08-19
  • 2022-03-10
  • 2021-08-18
  • 2022-12-23
  • 2021-10-31
猜你喜欢
  • 2022-01-14
  • 2021-07-20
  • 2021-09-24
  • 2021-07-25
  • 2021-04-02
  • 2021-11-20
相关资源
相似解决方案