Java SE集合部分--15.Collection單列集合
阿新 • • 發佈:2018-12-12
Java集合的分支圖:如下。標紅表示重要、其他作為了解
1、概述
集合按照其儲存結構可以分為兩大類,分別是單列集合java.util.Collection 和雙列集合java.util.Map ,今天 我們主要學習Collection 集合
從上圖可以看出:
Collection:單列集合類的根介面,用於儲存一系列符合某種規則的元素,它有兩個重要的子介面,分別是:
List 的特點是元素有序、元素可重複。List 介面的主要實現類有java.util.ArrayList 和java.util.LinkedList
Set 的特點是元素無序,而且不可重複。, Set 介面的主要實現類有java.util.HashSet 和java.util.TreeSet
2、集合與陣列的區別
1. 陣列長度固定. 不可變.
2. 集合長度可變. 可伸縮. 集合底層就是 `可變陣列`.
3. 陣列可以儲存 `基本資料型別` 和 `引用資料型別.`
4. 集合僅能儲存 `引用資料型別`, 不可以儲存基本資料型別.
因為底層使用 Object[] 陣列儲存元素. (Object[] elementData 元素資料)
3、Collection常用方法
方法演示:
package com.blog.test; import java.util.ArrayList; import java.util.Collection; public class Test { public static void main(String[] args) { // 如果程式中僅僅只想呼叫 Collection 介面中定義的方法, 應該用多型 // 多型 : 介面型別 = 實現類物件; // ArrayList<String> list = new ArrayList<>(); // 編譯器編譯時的特點 : 僅根據物件左邊接收的型別, 來尋找屬性和方法 Collection<String> c = new ArrayList<String>(); // 1. 新增 c.add("大羅"); c.add("小羅"); c.add("卡卡"); c.add("C羅"); c.add("梅西"); c.add("魯尼"); // ["大羅",...] 說明 ArrayList 類重寫 toString() 方法. System.out.println(c); // 2. 刪除 c.remove("大羅"); // 移除第一個出現的相同元素. System.out.println(c); // 3. isEmpty 判斷集合是否為空 boolean result = c.isEmpty(); System.out.println("result = " + result); // 4. size(); 返回集合中元素的個數 int size = c.size(); System.out.println("size = " + size); // 5. toArray 將集合轉換為陣列 Object[] objects = c.toArray(); for (int i = 0; i < objects.length; i++) { Object obj = objects[i]; System.out.println("obj = " + obj); } // 6. clear 清空集合 c.clear(); System.out.println("c = " + c); // [] } }
4、集合的遍歷方式-Iterator迭代器
4.1、概述
Iterator是一個介面、用於遍歷集合中的所有元素、
迭代:即Collection集合元素的通用獲取方式。在取元素之前先要判斷集合中有沒有元素,如果有,就把這個 元素取出來,繼續在判斷,如果還有就再取出出來。一直把集合中的所有元素全部取出。
Iterator介面的黨用的方法:
public E next() :返回迭代的下一個元素。
public boolean hasNext() :如果仍有元素可以迭代,則返回 true。
迭代器原理圖:
4.2、List集合遍歷:
package com.blog.test; import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; public class Test { public static void main(String[] args) { // 如果程式中僅僅只想呼叫 Collection 介面中定義的方法, 應該用多型 // 多型 : 介面型別 = 實現類物件; // ArrayList<String> list = new ArrayList<>(); // 編譯器編譯時的特點 : 僅根據物件左邊接收的型別, 來尋找屬性和方法 Collection<String> c = new ArrayList<String>(); // 1. 新增 c.add("大羅"); c.add("小羅"); c.add("卡卡"); c.add("C羅"); c.add("梅西"); c.add("魯尼"); Iterator<String> it = c.iterator(); while(it.hasNext()){ String next = it.next(); System.out.println("next = " + next); } } }
4.3、Set集合遍歷:
public class IteratorTest2 {
public static void main(String[] args) {
/*
Set 介面定義的特點 : 無序, 不可重複.
*/
// 1. 定義一個 `陣列列表` 集合
Collection<String> c = new HashSet<String>();
// 2. 新增元素
c.add("劉德華");
c.add("張學友");
c.add("黎明");
c.add("郭富城");
c.add("劉德華");
c.add("張學友");
c.add("黎明");
c.add("郭富城");
System.out.println(c);
// 3. 遍歷集合: Collection介面定義的通用遍歷規則 (迭代器)
Iterator<String> it = c.iterator();
// 3.1 while 迴圈 + hasNext() 方法判斷是否有下一個元素
while (it.hasNext()) {
// 3.2 如果有, 取出下一個元素
String next = it.next();
System.out.println("next = " + next);
}
}
}
4.4、迭代器原理圖:
迭代器使用注意一 : 一個 hasNext 不要對應多個 next 方法
public class IteratorDetailTest1 {
public static void main(String[] args) {
// 1. 定義一個 `陣列列表` 集合
Collection<String> c = new ArrayList<String>();
// 2. 新增元素
c.add("劉德華");
c.add("張學友");
c.add("黎明");
c.add("郭富城");
c.add("郭德綱");
System.out.println(c);
// 3. 迭代集合
Iterator<String> it = c.iterator();
// 判斷
while (it.hasNext()) {
// 取出
String next = it.next();
// 檢視
System.out.println("it.next() = " + it.next());
}
}
}
迭代器使用注意二 : 迭代器迭代同時, 不要使用集合對元素進行 `增刪改` 操作
package com.blog.test;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
public class Test {
public static void main(String[] args) {
// 如果程式中僅僅只想呼叫 Collection 介面中定義的方法, 應該用多型
// 多型 : 介面型別 = 實現類物件;
// ArrayList<String> list = new ArrayList<>();
// 編譯器編譯時的特點 : 僅根據物件左邊接收的型別, 來尋找屬性和方法
Collection<String> c = new ArrayList<String>();
// 1. 新增
c.add("大羅");
c.add("小羅");
c.add("卡卡");
c.add("C羅");
c.add("梅西");
c.add("魯尼");
System.out.println(c);
// 3. 迭代集合
Iterator<String> it = c.iterator();
// 判斷
while (it.hasNext()) {
// 取出
String next = it.next();
// 判斷當前取出的元素是否為 `C羅`
if (next.equals("C羅")) {
// 刪除C羅
c.remove(next);
//it.remove();
}
}
System.out.println(c);
}
}
5、增強for迴圈
5.1、概述
增強for迴圈(也稱for each迴圈)是JDK1.5以後出來的一個高階for迴圈,專門用來遍歷陣列和集合的。它的內部原 理其實是個Iterator迭代器,所以在遍歷的過程中,不能對集合中的元素進行增刪操作。
5.2、格式:
for(元素的資料型別 變數 : Collection集合or陣列){
//寫操作程式碼
}
遍歷陣列:
package com.blog.test;
import java.util.ArrayList;
import java.util.Collection;
public class Test {
public static void main(String[] args) {
int[] arr = {3,5,6,87};
//使用增強for遍歷陣列
for (int a : arr) {//a代表陣列中的每個元素
System.out.println(a);
}
Collection<String> coll = new ArrayList<String>();
coll.add("小天使");
coll.add("老河神");
coll.add("神婆");
for (String s : coll) {
System.out.println(s);
}
}
}
遍歷集合:
package com.blog.test;
import java.util.ArrayList;
import java.util.Collection;
public class Test {
public static void main(String[] args) {
Collection<String> coll = new ArrayList<String>();
coll.add("小天使");
coll.add("鬼老");
coll.add("神婆");
//使用增強for遍歷
for(String s :coll){//接收變數s代表 代表被遍歷到的集合元素
System.out.println(s);
}
}
}