集合1:Java集合框架體系、Collection接口、Collection方法、Collection遍歷集合

  • Java Collection

集合是什麼:集合就是“由若干個確定的元素所構成的整體”。

爲什麼要在計算機中引入集合:在Java中,如果一個Java對象可以在內部持有若干其他Java對象,並對外提供訪問接口,我們把這種Java對象稱爲集合。很顯然,Java的數組可以看作是一種集合。

既然Java提供了數組這種數據類型,可以充當集合,那麼,我們爲什麼還需要其他集合類?這是因爲數組有如下限制:

  • 數組初始化後大小不可變;
  • 數組只能按索引順序存取。

因此,我們需要各種不同類型的集合類來處理不同的數據,例如:

  • 可變大小的順序鏈表;
  • 保證無重複元素的集合;
  • 保存有映射關係的數據;
  • ...
  • 集合的體系結構

集合類,主要由兩個接口派生而來:==Collection 和 Map==

其中,Collection是單列集合的頂層接口(父接口),用於存儲引用類型數據,所謂單列集合,就是指每一個元素都是一個單獨的個體。

我們需要重點掌握:==HashSet、LinkedHashSet、TreeSet== ==ArrayList、LinkedList、Vector==

而Map,則是雙列集合的頂層接口(父接口),所謂雙列集合,就是指每個操作都是以一對數據作爲單位來進行的。Map 實現類,用於保存具有映射關係的數據,也就是 ==key-value== 對,但 ==key 不會重複==,一般 需要通過 key 來找到對應的 value 值。

我們需要重點掌握:==HashMap、TreeMap、LinkedHashMap==

 

 

Java集合的設計有幾個特點:一是實現了接口和實現類相分離,例如,有序表的接口是List,具體的實現類有ArrayListLinkedList等,二是支持泛型,我們可以限制在一個集合中只能放入同一種數據類型的元素,例如:

List<String> list = new ArrayList<>(); // 只能放入String類型

最後,Java訪問集合總是通過統一的方式——迭代器(Iterator)來實現,它最明顯的好處在於無需知道集合內部元素是按什麼方式存儲的。

由於Java的集合設計非常久遠,中間經歷過大規模改進,我們要注意到有一小部分集合類是遺留類,不應該繼續使用:

  • Hashtable:一種線程安全的Map實現;
  • Vector:一種線程安全的List實現;
  • Stack:基於Vector實現的LIFO的棧。

還有一小部分接口是遺留接口,也不應該繼續使用:

  • Enumeration<E>:已被Iterator<E>取代。
  • 使用Collection 

 因爲Collection是接口所以注意他不能創建對象,需要使用多態去實現對於Collection方法的使用。Collection存儲元素的特點1. 數據可重複;2.數據存儲無序(看集合是否是無序/有序,與添加和輸出順序無關,看是否通過下標能得到元素內容)

Collection常用方法:

  1. add(Object obj) -向集合中添加元素
  2. remove(Object obj) -將obj從集合中移除
  3. clear() -將集合中存儲的所有的元素都清空
  4. isEmpty() -判斷集合是否爲空
  5. size() -返回集合中元素個數  其實集合的長度
  6. contains(Object obj) -判斷集合中是否包含obj此元素

下面進入代碼演示:

public class CollectionDemo1 {

	public static void main(String[] args) {
		//collection是接口 不能直接創建對象  因此我們採取多態 new子類對象向上轉型
		//所有的集合導包  ===》java.util包下
		//第一步   創建好對象
		Collection c1=new ArrayList();
		//第二步  往集合中去添加元素
                c1.add("張三");
                c1.add(11);
                c1.add(11);//雖然集合只能存儲引用類型數據 但是因爲基本類型有其包裝類 存儲的時候轉成包裝類類型 (引用類型) 且這裏看到 可以存儲重複的元素
		c1.add(true);
		c1.add(33.3);
		// 移除單個元素
		c1.remove(11);
		
		//清空所有元素
        //c1.clear();
		//判斷集合是否爲空  空元素返回true  有元素返回false
		System.out.println("判斷集合是否爲空"+c1.isEmpty());
		//得到集合長度
		System.out.println("集合的長度(元素個數)"+c1.size());
		//判斷此元素是否在集合中
		System.out.println("判斷11是否在c1集合中  如果在集合中返回true  如果不在返回的false"+c1.contains(11));
		
		
		//測試 打印集合名    爲什麼能直接打印集合對象名輸出集合元素內容 因爲了重寫toString
		System.out.println(c1);
	}
}

Collection帶all的方法:

  1. addAll(collection c) -將參數c中所有元素,都添加到調用者集合中
  2. removeAll(collection c) -從調用者集合刪除那些也存在於參數c中的元素
  3. contains(collection c) -判斷調用者是否包含參數c中的所有元素
  4. retainAll(Collection c) -參數c 中有哪些元素,就在調用者集合中,保留哪些元素(交集)

下面進入代碼演示:

public class CollectionDemo2 {

	/*帶all方法與不帶all方法
	  不帶all方法 對應的基本單個元素
	  帶all 對應一個集合(Collection)*/
	public static void main(String[] args) {
		//創建集合對象c1
		Collection c1=new ArrayList<>();
		//創建集合對象c2
		Collection c2=new ArrayList<>();
		//向c1添加元素
		c1.add(12);
		c1.add(1);
		c1.add(2);
		c1.add(16);
		c1.add(126);


		//向c2添加元素
		c2.add("張三");
		c2.add("李四");
		//把c1集合元素 添加到c2集合中
		c2.addAll(c1);
		c2.addAll(c1);

        System.out.println(c1);
		System.out.println(c2);
		//移除c2集合中  c1元素的相關元素內容(c1元素有的 c2有的移除)
		c2.removeAll(c1);
		System.out.println(c2);
		//清空集合中所有元素
        //c2.clear();
		//判斷c1元素內容 是否在c2集合中   如果是返回true  不是返回false
		System.out.println(c2.containsAll(c1));
		
		//保留c1元素內容 在c2集合中
		c2.retainAll(c1);
		System.out.println(c2);
	}
}

Collection的三種遍歷方式

請看代碼演示:

public class CollectionDemo3 {

	public static void main(String[] args) {
		Collection c1=new ArrayList();
		c1.add(22);
		c1.add(22);
		c1.add(22);
		c1.add(22);
		c1.add(22);
		method01(c1);
        method02(c2);
		method03(c1);
    }
	//第一種方式:利用toArray()方法將集合轉成數組  通過數組間接遍歷集合
	public static void method01(Collection c1) {
		Object[] o1=c1.toArray();
		for (Object object : o1) {
			System.out.println(object);
		}
	}
	//第二種:使用foreach遍歷集合(只要集合中存在iterator() 迭代器方法 就可以使用foreach遍歷)
	public static void method02(Collection c1) {
		//for增強的寫法:for(類型 名字:集合對象名/數組名){輸出名字}
		for (Object oo : c1) {
			System.out.println(oo);
		}
	}
	//第三種:使用迭代器遍歷集合(迭代器的作用遍歷集合元素:迭代器要遍歷的時候會判斷是否有元素 然後再進行遍歷)
    public static void method03(Collection c1) {
		//第一步 得到迭代器
		Iterator i1=c1.iterator();
		//hasNext(); 判斷是否有元素的方法
		//next(); 通過此方法返回元素內容
		//每個元素都需要先判斷  再去輸出內容 
		while(i1.hasNext()) {//先判斷有沒有元素,有元素返回true  沒有元素返回的false 
			//再輸出
			System.out.println(i1.next());
		}
		//這個過程類似一個遊標在一行集合元素上滑動,hasNext()用來判斷遊標右邊是否有元素,如果有,返回true,則next()會返回遊標後面的這個元素,並把遊標移動到下個元素之前的位置,這樣依次執行,遍歷完集合,遊標的返回值是false,就跳出循環,遍歷結束。
                //現在你知道了,爲什麼直接System.out.println(i1.next());是不行的,只會輸出一個元素
	}

 

 

 

 

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