236
魔獸
Java集合-Collection
Collection接口是 (java.util.Collection)是Java集合類的頂級接口之一。所以不能直接實例化一個Collection,但是可以實例化它的一個子類,你或許經常把這些子類作為一個Collection統一探討。在這篇文章中,你將看到如何處理。
下麵是本文的一個主題列表:
- Collection子類
- 增加和移除元素
- 檢測一個Collection是否包含一個確定的元素
- Collection大小
- 遍曆一個Collection
Collection子類
下麵的接口繼承了Collection接口:
- List
- Set
- SortedSet
- NavigableSet
- Queue
- Deque
Java沒有一個可用的Collection接口的實現,所以你必須使用上述列表中的子類。Collection接口僅僅隻是定義了每個子類共享的一係列方法。這使得忽略你具體使用的Collection類型而把他們當作一個Collection統一對待成為可能。這是一個標準的繼承,沒有什麼神奇之處,但是有時候會成為一個很好的特性。本文的後麵部分將描述這些常用操作的大部分使用方法。
下麵是一個Collection操作的一個方法:
01 |
public class MyCollectionUtil{
|
03 |
public static void doSomething(Collection collection) {
|
05 |
Iterator iterator = collection.iterator();
|
06 |
while (iterator.hasNext()){
|
07 |
Object object = iterator.next();
|
09 |
//do something to object here...
|
下麵是調用不用類型的Collection子類的方法的一些方式:
1 |
Set set = new HashSet();
|
2 |
List list = new ArrayList();
|
4 |
MyCollectionUtil.doSomething(set); |
5 |
MyCollectionUtil.doSomething(list); |
增加和移除元素
不管你使用的是哪種類型的Collection子類,有一些標準的方法從一個Collection中增加和移除元素。增加和移除單個的元素就像下麵這樣:
1 |
String anElement = "an element" ;
|
2 |
Collection collection = new HashSet();
|
4 |
boolean didCollectionChange = collection.add(anElement);
|
5 |
boolean wasElementRemoved = collection.remove(anElement);
|
add()
方法向Collection中增加元素,如果Collection結構改變了,作為add()
方法的結果,將返回true。如果一個Set
的實例中已經存在了這個元素,那麼不會重複增加,這個Set
實例的結構也不會發生變化。另一方麵,如果在一個List
上調用這個方法,而這個List
已經存在了這個元素,那麼這個List
將有兩個這個元素。
remove()
方法移除一個元素。如果Collection中存在這個元素並且被移除了,這個方法將返回true。如果元素不存在,將返回false。
你也可以增加和移除Collection對象,下麵是一些示例:
01 |
Set aSet = ... // get Set with elements from somewhere
|
02 |
List aList = ... // get List with elements from somewhere
|
04 |
Collection collection = new HashSet();
|
06 |
collection.addAll(aSet); //returns boolean too, but ignored here.
|
07 |
collection.addAll(aList); //returns boolean too, but ignored here.
|
09 |
collection.removeAll(aList); //returns boolean too...
|
10 |
collection.retainAll(aSet); //returns boolean too...
|
addAll()
方法增加通過參數傳遞過來的Collection中的所有元素。這個Collection對象本身不會被添加,僅僅隻是添加它的元素。但是如果你調用add()
方法傳遞這個參數,這個Collection對象本身將被添加,而不是它的元素。
正是由於addAll()
方法依賴於Collection的子類。有一些子類允許一樣的元素被多次添加,而另外一些則不允許。
removeAll()
方法移除通過參數傳遞過來的Collection中的所有元素。如果傳遞過來的Collection中某些元素在目標Collection中不存在,這些元素將會忽略。
retainAll()
方法正好和removeAll()
方法相反。不是移除所有給定參數Collection中元素,而是保留保留這些元素,移除其他的。記住,隻有目標Collection中已經存在了這些元素,這些元素才可以保留。在參數Collection中存在而目標Collection中不存在的元素,將不會被新增到目標Collection。它們將被忽略:
來看看一些使用偽代碼的例子:
01 |
Collection colA = [A,B,C] |
02 |
Collection colB = [ 1 , 2 , 3 ]
|
04 |
Collection target = []; |
06 |
target.addAll(colA); //target now contains [A,B,C]
|
07 |
target.addAll(colB); //target now contains [A,B,C,1,2,3]
|
09 |
target.retainAll(colB); //target now contains [1,2,3]
|
11 |
target.removeAll(colA); //nothing happens - already removed
|
12 |
target.removeAll(colB); //target is now empty.
|
檢測一個Collection是否包含一個確定的元素
Collection接口有兩個方法來檢查一個Collection是否包含一個或多個元素。這就是contains()
和containsAll()
方法。它們在下麵被說明:
1 |
Collection collection = new HashSet();
|
2 |
boolean containsElement = collection.contains( "an element" );
|
4 |
Collection elements = new HashSet();
|
5 |
boolean containsAll = collection.containsAll(elements);
|
如果這個Collection含有這個元素,contains()
方法將返回true,反之,則亦然。
如果這個Collection包含給定Collection參數中的所有元素,containsAll()
方法將返回true,反之,則亦然。
Collection大小
你可以通過調用size()
方法來檢測一個Collection的大小,”Size“表示Collection中的元素個數,下麵是一個示例:
1 |
int numberOfElements = collection.size();
|
迭代一個Collection
你可以迭代collection中的所有元素,collection中包含的Iterator將完成這件事情,就像下麵這樣:
1 |
Collection collection = new HashSet();
|
2 |
//... add elements to the collection |
4 |
Iterator iterator = collection.iterator(); |
5 |
while (iterator.hasNext()){
|
6 |
Object object = iterator.next();
|
7 |
//do something to object;
|
你也可以使用新的for循環:
1 |
Collection collection = new HashSet();
|
2 |
//... add elements to the collection |
4 |
for (Object object : collection) {
|
5 |
//do something to object;
|
最後更新:2017-05-22 14:02:21