Java基礎之Collections框架及其源碼分析
集合有時候稱爲容器,是將多個元素組合成一個單元的簡單對象。集合用於存儲、檢索、操作和通信聚合數據。
Collections接口層級
Collections集合接口封裝了不同類型的集合,這些接口允許對集合的操作獨立於它們表示的細節。Collections集合接口是Java集合框架的基礎。
如上圖所示有很多子接口:
Set: 使用過set集合的應該大概瞭解了set的使用。set是不能包含重複元素的集合,
SortedSet:只是Set是有序形式。
List:有序集合(有時稱爲序列)。列表可以包含重複的元素。列表的用戶通常可以精確地控制每個元素在列表中的位置,並且可以通過元素的整數索引(位置)訪問元素。
Queue:隊列,使用先進先出的原則(FIFO)。
Deque:雙向隊列,Deques可以作爲先進先出(FIFO)和後進先出(LIFO)兩種形式使用。在deque中,可以在兩端插入、檢索和刪除所有新元素。
Map:以key-value映射元素,不能包括相同的Key,一個key最多隻能關聯一個值。
SortedMap:只是Map是有序形式。
申明Collections
public interface Collection…定義一個Collection接口。
源碼
Collection繼承了Iterable接口,實現迭代器接口。
public interface Collection<E> extends Iterable<E> {
/**
返回集合中元素個數 ,如果集合中的元素大於Integer.MAX_VALUE,將返回Integer.MAX_VALUE
*/
int size();
/**
* 返回集合是否爲空
*/
boolean isEmpty();
/**
*返回集合中是否包含指定元素
*/
boolean contains(Object o);
/**
返回此集合中元素的迭代器
*/
Iterator<E> iterator();
/**
* 返回一個數組包含集合中的所有元素
如果這個集合保證了迭代器返回元素的順序,那麼這個方法必須以相同的順序返回元素
*
*/
Object[] toArray();
/**
* 指定相關類型的包含集合中所有元素的數組(指定類型)
*/
<T> T[] toArray(T[] a);
/**
* 確保此集合包含指定的元素,添加元素,如果操作成功,將返回true,否則返回true,如果限制集合元素不能重複,添加相同的元素將返回false
*/
boolean add(E e);
/**
* 移除集合中指定的元素返回操作的結果
*/
boolean remove(Object o);
/**
*判斷集合中是否包含指定集合中的所有元素
*/
boolean containsAll(Collection<?> c);
/**
* 添加指定集合中所有元素到當前的集合中
*/
boolean addAll(Collection<? extends E> c);
/**
* 當前集合中刪除指定集合中所有的元素
*/
boolean removeAll(Collection<?> c);
/**
JDK 1.8支持lambda表達式
當前集合中刪除指定集合中所有的元素,如果出現異常,交給Predicate處理
*/
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;
}
/**
*僅保留此集合中指定集合中包含的元素(可選操作)
*/
boolean retainAll(Collection<?> c);
/**
移除集合中所有的元素
*/
void clear();
/**
* 比較指定的對象與此集合是否相等.
*/
boolean equals(Object o);
/**
* 返回集合的hashCode值.
*/
int hashCode();
/**
JDK1.8之後版本使用,default也是1.8使用,接口默認方法
* 在此集合的元素上創建一個Spliterator
*/
@Override
default Spliterator<E> spliterator() {
return Spliterators.spliterator(this, 0);
}
/**
JDK1.8之後版本使用,default也是1.8使用,接口默認方法
*返回一個順序的Stream,將此集合作爲其源
*/
default Stream<E> stream() {
return StreamSupport.stream(spliterator(), false);
}
/**
JDK1.8之後版本使用,使用並行流處理集合,包括filter,group等操作,,default也是1.8使用,接口默認方法
*返回一個可能是並行的Stream,將此集合作爲其源。此方法允許返回順序流。
*/
default Stream<E> parallelStream() {
return StreamSupport.stream(spliterator(), true);
}
}
看到Collections集合頂層的接口,裏面的相關方法,我們知道List,Set等子集合接口裏面的方法形式。並且瞭解了我們使用lambda進行操作List的時候相關實現所使用的方法。