一、类图
二、分析
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 < 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)返回值