集合初識和用法——collection(Java)

Collection接口繼承了Iterable接口,能夠被foreach使用,是可迭代的。下面介紹它已實現的子接口:

在API中它的已知子類和實現的類有很多,目前在這裏只介紹幾個它常用的子接口和collection的用法。

List接口

有序的 collection(也稱爲序列)。此接口的用戶可以對列表中每個元素的插入位置進行精確地控制。用戶可以根據元素的整數索引(在列表中的位置)訪問元素(提供角標),並搜索列表中的元素。列表允許重複的元素、列表是一維數據允許null

提供了特殊的迭代器,稱爲 ListIterator,除了允許 Iterator 接口提供的正常操作外,該迭代器還允許元素插入和替換,以及雙向訪問。還提供了一個方法來獲取從列表中指定位置開始的列表迭代器。       

Set接口

一個不包含重複元素的 collection、無序、沒有角標、某些 set 實現對其所包含的元素有所限制。例如,某些實現禁止 null 元素,而某些則對其元素的類型所有限制。

Queue接口

在處理元素前用於保存元素的 collection。除了基本的 collection 操作外,隊列還提供其他的插入、提取和檢查操作每個方法都存在兩種形式:一種拋出異常(操作失敗時),另一種返回一個特殊值(null 或 false,具體取決於操作)。插入操作的後一種形式是用於專門爲有容量限制的 Queue 實現設計的;在大多數實現中,插入操作不會失敗

隊列通常(但並非一定)以 FIFO(先進先出)的方式排序各個元素。不過優先級隊列和 LIFO 隊列(或堆棧)例外,前者根據提供的比較器或元素的自然順序對元素進行排序,後者按 LIFO(後進先出)的方式對元素進行排序。無論使用哪種排序方式,隊列的 都是調用 remove() poll()所移除的元素。在 FIFO 隊列中,所有的新元素都插入隊列的末尾。其他種類的隊列可能使用不同的元素放置規則。每個 Queue 實現必須指定其順序屬性。

Queue 實現通常不允許插入 null 元素,儘管某些實現(如LinkedList)並不禁止插入 null。即使在允許 null 的實現中,也不應該將 null 插入到 Queue 中,因爲 null 也用作 poll 方法的一個特殊返回值,表明隊列不包含元素。

Deque接口

一個線性 collection,支持在兩端插入和移除元素。名稱 deque 是“double ended queue(雙端隊列)”的縮寫,大多數 Deque 實現對於它們能夠包含的元素數沒有固定限制,但此接口既支持有容量限制的雙端隊列也支持沒有固定大小限制的雙端隊列。

此接口擴展了Quene接口。在將雙端隊列用作隊列時,將得到 FIFO(先進先出)行爲。將元素添加到雙端隊列的末尾,從雙端隊列的開頭移除元素。從 Queue 接口繼承的方法完全等效於 Deque 方法。

雖然 Deque 實現沒有嚴格要求禁止插入 null 元素,但建議最好這樣做。建議任何事實上允許 null 元素的 Deque 實現用戶最好 要利用插入 null 的功能。這是因爲各種方法會將 null 用作特殊的返回值來指示雙端隊列爲空。

collection的方法

collection方法的測試和使用示例

import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;


public class Main {
	public static void main(String[] args) {
    //<E>泛型,表示該集合存儲的是什麼類型的元素
    //collection是接口,不能創建對象,只能創建其子類的對象,然後定義引用指向子類的對象
		Collection<Integer> coll=new ArrayList<Integer>();
   //ArrayList是collection接口的子類,所以可以創建一個該類的對象,父類引用指向它
		for(int i=1;i<=10;i++){
			coll.add(i); //add方法,添加單個元素
		}
		System.out.println(coll.toString()); 
      // 打印結果 [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],按順序輸出

            //再創建一個集合
		Collection<Integer> coll2=new ArrayList<Integer>(); 
		for(int i=11;i<=20;i++){
			coll2.add(i);
		}
		System.out.println(coll2.toString());
      //打印coll2的結果 [11, 12, 13, 14, 15, 16, 17, 18, 19, 20]
		coll.addAll(coll2); //addAll方法,將coll2中的集合全部添加到coll集合中
		System.out.println(coll);
     //打印結果 [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20]

              //contains方法判斷該集合中是否包含某個元素
		System.out.println(coll.contains(100));    
               //結果 false
                System.out.println(coll.contains(10));
               //結果 true
       
             //remove方法移出某集合中的某個元素,返回的類型是Boolean類型
		System.out.println(coll2.remove(11));
             //結果 true
		System.out.println(coll2.remove(100));
             // 結果 false

             //測試添加的位置,在末尾添加,不具有自動排序的功能
		coll2.add(66);
                coll2.add(66);
		System.out.println(coll2);
             //結果 [12, 13, 14, 15, 16, 17, 18, 19, 20, 66, 1]

             //containsAll方法,判斷該集合是否包含另一個集合,返回類型是Boolean類型
		System.out.println(coll.containsAll(coll2));
             //結果 false
          
             //equals方法比較兩個對象的地址是否相同,返回類型是Boolean類型
		System.out.println(coll.equals(coll2));
             //結果 false

             //isEmpty方法是判空操作,判斷該集合是否是一個空集合,返回類型仍是Boolean類型
		System.out.println(coll.isEmpty());
             //結果 false
 
//size方法獲得的是集合的長度,返回類型爲int類型。就如:獲取數組的長度調用的是length屬性,獲取字符串的長度調用的是length方法
		System.out.println(coll.size());
           //結果 20

              //retainAll保留兩個集合共有的元素,也就是求交集
		coll.retainAll(coll2);
		System.out.println(coll);
              //結果 [1, 12, 13, 14, 15, 16, 17, 18, 19, 20]

		
            //遍歷集合的方法之一 foreach
		for(Integer number:coll){
			System.out.println(number);
		}
		System.out.println("==============");

           //遍歷集合的方法之二 迭代器Iterator
		Iterator<Integer> iterator=coll.iterator();
		/* 迭代器是集合中內置的一個對象,該對象主要用來訪問集合當前狀態下的元素
		 *  hasNext()   是否有下一個
		 *  next()      取下一個
                 *  這兩個方法是Iterator<E>中的方法,collection中並沒有
		 * */
		while(iterator.hasNext()){  //從頭之前開始遍歷,如果該集合的下一個元素存在
			System.out.println(iterator.next()); //則取下一個並打印
		}
		coll.clear(); //清除該集合對象中所有的元素
		System.out.println(coll);
              //結果 []
	}
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章