最近看到《Java核心技術 卷Ⅰ》集合的部分,知道這是很重要的一部分內容,特地學習一下集合的原始碼。本來是想在CSDN上面寫的,但是CSDN社群的環境太亂了,恰好在掘金上看到了“大大紙飛機”同學寫的集合相關的文章很不錯。所以轉戰掘金。
Java集合框架包含了很多的資料結構,主要包括 List列表、Set集合、Map對映、迭代器(Iterator、Enumeration)、工具類(Arrays、Collections)幾個部分。
集合框架的介面
畫圖使用了:processon.com
其中有兩個最基本的介面:Collection和Map。 而List、Set和Queue介面又繼承了Collection介面。SortedMap介面繼承了Map介面。(1)Collection介面
public interface Collection<E> extends Iterable<E>
Collection介面包含了我們平時使用的一些方法:
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);
複製程式碼
(2)List介面
List是一個繼承自Collection的介面,List是集合中的一種。List是有序的佇列,List中的每一個元素都有一個索引;第一個元素的索引值是0,往後的元素的索引值依次+1。和Set不同,List中允許有重複的元素。
(3)Set介面
Set介面也是集合中的一種。Set的add方法不允許增加重複的元素。可以適當的定義equals方法:只要兩個集包含同樣的元素就認為是相等的,而不要求這些元素有同樣的順序。hashCode方法的定義要保證包含相同元素的兩個集會得到相同的雜湊碼。
SortedSet會提供用於排序的比較器物件。
public interface Set<E> extends Collection<E>{
int size();
boolean isEmpty();
boolean contains(Object o);
Iterator<E> iterator();//迭代器物件
@Override
default Spliterator<E> spliterator() {
return Spliterators.spliterator(this, Spliterator.DISTINCT);//並行遍歷的迭代器
}
}
複製程式碼
(4)Queue介面
Queue介面也繼承自Collection介面,實現了佇列的資料結構:
boolean add(E e);//增加一個元索
boolean offer(E e);//新增一個元素並返回true,如果佇列已滿,則返回false
E remove();//移除並返回佇列頭部的元,如果佇列為空,則丟擲一個NoSuchElementException異常
E poll();//移除並返問佇列頭部的元素,如果佇列為空,則返回null
E element();//返回佇列頭部的元素,如果佇列為空,則丟擲一個NoSuchElementException異常
E peek();//返回佇列頭部的元素,如果佇列為空,則返回null
複製程式碼
(5)Iterator介面
Iterator集合的迭代器。集合可以通過Iterator去遍歷集合中的元素。Iterator提供的API介面,包括:是否存在下一個元素、獲取下一個元素、刪除當前元素。
boolean hasNext();
E next();
default void remove() {
throw new UnsupportedOperationException("remove");
}
default void forEachRemaining(Consumer<? super E> action) {
Objects.requireNonNull(action);
while (hasNext())
action.accept(next());
}
複製程式碼
(6)Map介面
提供了對映需要的基本方法:
int size();
boolean isEmpty();
boolean containsKey(Object key);
boolean containsValue(Object value);
V get(Object key);
V put(K key, V value);
V remove(Object key);
void putAll(Map<? extends K, ? extends V> m);
void clear();
Set<K> keySet();
Collection<V> values();
Set<Map.Entry<K, V>> entrySet();
複製程式碼
(7)SortedMap介面
SortedMap與SortedSet介面會提供用於排序的比較器物件。
public interface SortedMap<K,V> extends Map<K,V>{
Comparator<? super K> comparator();
SortedMap<K,V> subMap(K fromKey, K toKey);
SortedMap<K,V> headMap(K toKey);
SortedMap<K,V> tailMap(K fromKey);
K firstKey();
K lastKey();
Set<K> keySet();
Collection<V> values();
Set<Map.Entry<K, V>> entrySet();
}
複製程式碼
(8)Iterator介面
public interface Iterator<E> {
boolean hasNext();
E next();
default void remove() {
throw new UnsupportedOperationException("remove");
}
//主要將每個元素作為引數發給action來執行特定操作
default void forEachRemaining(Consumer<? super E> action) {
Objects.requireNonNull(action);
while (hasNext())
action.accept(next());
}
}
複製程式碼