前言
首先,我們對Collection進行說明。下面先看看下JDK文檔中對於Collection集合的一些說明:
public interface Collection<E> extends Iterable<E>
集合層次結構中的根界面 。
集合表示一組被稱爲其元素的對象。一些集合允許重複元素,而其他集合不允許。有些被命令和其他無序。
JDK不提供此接口的任何直接實現:它提供了更具體的子接口的實現,如Set和List。
該界面通常用於傳遞集合,並在需要最大的通用性的情況下對其進行操作。
包或多重集(可能包含重複元素的無序集合)應直接實現此接口。
所有通用的Collection實現類,應提供兩個"標準"構造函數:
- 一個void(無參數)構造函數,它創建一個空集合,
- 一個構造函數, Collection ,它創建一個與其參數相同的元素的新集合。
實際上,後一個構造函數允許用戶複製任何集合,生成所需實現類型的等效集合。 沒有辦法強制執行此約定(因爲接口不能包含構造函數),而是所有Java平臺庫中的通用Collection實現。
實現要求:
- 默認方法實現(繼承或其他)不應用任何同步協議。 如果Collection實現具有特定的同步協議,那麼它必須覆蓋默認實現以應用該協議。
1、方法摘要
OK,我們來看一下Collection接口的一些方法摘要。
返回值類型 |
方法 |
描述 |
boolean |
add(E e) | 確保此集合包含指定的元素(可選操作)。 |
boolean | addAll(Collection<? extends E> c) | 將指定集合中的所有元素添加到此集合(可選操作)。 |
void | clear() | 從此集合中刪除所有元素(可選操作)。 |
boolean | contains(Object o) | 如果此集合包含指定的元素,則返回 true。 |
boolean | containsAll(Collection<?> c) | 如果此集合包含指定 集合中的所有元素,則返回true。 |
boolean | equals(Object o) | 將指定的對象與此集合進行比較以獲得相等性。 |
int | hashCode() | 返回此集合的哈希碼值。 |
boolean | isEmpty() | 如果此集合不包含元素,則返回 true 。 |
Iterator<E> | iterator() | 返回此集合中的元素的迭代器。 |
default Stream<E> | parallelStream() | 返回可能並行的 Stream與此集合作爲其來源。 |
boolean | remove(Object o) | 從該集合中刪除指定元素的單個實例(如果存在)(可選操作)。 |
boolean | removeAll(Collection<?> c) | 刪除指定集合中包含的所有此集合的元素(可選操作)。 |
default boolean | removeIf(Predicate<? super E> filter) | 刪除滿足給定謂詞的此集合的所有元素。 |
boolean | retainAll(Collection<?> c) | 僅保留此集合中包含在指定集合中的元素(可選操作)。 |
int | size() | 返回此集合中的元素數。 |
default Spliterator<E> | spliterator() | 創建一個Spliterator在這個集合中的元素。 |
default Stream<E> | stream() | 返回以此集合作爲源的順序 Stream 。 |
Object[] | toArray() | 返回一個包含此集合中所有元素的數組。 |
<T> T[] | toArray(T[] a) | 返回包含此集合中所有元素的數組; 返回的數組的運行時類型是指定數組的運行時類型。 |
2、方法詳細信息
接下來,通過幾個demo測試類來了解下Collection中的這些方法詳細信息。
【1】int size();
作用描述:返回此集合中的元素數。如果此collection包含超過Integer.MAX_VALUE個元素,則返回Integer.MAX_VALUE 。
返回結果:此集合中的元素數
測試程序:
@Test
public void test_size(){
Collection<String> collection = new ArrayList<>();
collection.add("a");
collection.add("b");
collection.add("c");
collection.add("d");
int size = collection.size();
System.out.println("集合中元素的個數:" + size);
}
測試結果:
集合中元素的個數:4
【2】 boolean isEmpty();
作用描述:判斷集合是否爲空,如果爲空,則返回 true;反之,則返回false。
返回結果:true/false
測試程序:
@Test
public void test_isEmpty(){
Collection<String> collection = new ArrayList<>();
collection.add("a");
collection.add("b");
collection.add("c");
boolean isEmpty = collection.isEmpty();
System.out.println("集合是否爲空:" + isEmpty);
}
測試結果:
集合是否爲空:false
【3】 boolean contains(Object o);
作用描述:判斷集合是否包含指定元素,如果包含,則返回 true;反之,則返回false。
返回結果:true/false
測試程序:
@Test
public void test_isEmpty(){
Collection<String> collection = new ArrayList<>();
collection.add("a");
collection.add("b");
collection.add("c");
boolean isContains = collection.contains("a");
System.out.println("集合是否包含元素a:" + isContains);
}
測試結果:
集合是否包含元素a:true
【4】 Iteratble<E> iterator();
作用描述:返回此集合中的元素的迭代器。 沒有關於元素返回順序的保證(除非這個集合是提供保證的某個類的實例)。
返回結果:一個 Iterator在這個集合中的元素 。
測試程序:
@Test
public void test_iterator() {
Collection<String> collection = new ArrayList<>();
collection.add("a");
collection.add("b");
collection.add("c");
Iterator<String> iterator = collection.iterator();
while (iterator.hasNext()) {
String next = iterator.next();
System.out.println("迭代器遍歷出來的集合元素:" + next);
}
}
測試結果:
迭代器遍歷出來的集合元素:a
迭代器遍歷出來的集合元素:b
迭代器遍歷出來的集合元素:c
【5】 Object[] toArray();
作用描述:返回一個包含此集合中所有元素的數組。如果此集合對其迭代器返回的元素的順序做出任何保證,則此方法必須以相同的順序返回元素。 返回的數組將是“安全的”,因爲該集合不保留對它的引用。(換句話說,這個方法必須分配一個新的數組,即使這個集合是由數組支持的)。因此,調用者可以自由地修改返回的數組。此方法充當基於陣列和基於集合的API之間的橋樑。
返回結果:一個包含此集合中所有元素的數組
測試程序:
@Test
public void test_toArray() {
Collection<String> collection = new ArrayList<>();
collection.add("a");
collection.add("b");
collection.add("c");
System.out.println("集合元素:" + collection);
Object[] objects = collection.toArray();
for (int i = 0; i<objects.length;i++){
System.out.println("數組元素:" + objects[i].toString());
}
}
測試結果:
集合元素:[a, b, c]
數組元素:a
數組元素:b
數組元素:c
【6】 1-boolean remove(); 2-void clear();
作用描述:1-移除集合中的元素;2-清空集合
返回結果:1-true/false;2-void;
測試程序:
@Test
public void test_removeAndClear(){
Collection<String> collection = new ArrayList<>();
collection.add("a");
collection.add("b");
collection.add("c");
System.out.println("集合元素:" + collection);
boolean remove = collection.remove("c");
System.out.println("移除元素a後的新集合:" + collection);
collection.clear();
System.out.println("清空後的集合:" + collection);
}
測試結果:
集合元素:[a, b, c]
移除元素a後的新集合:[a, b]
清空集合:[]