[TOC]
>[success] # Collection
1. `java.util.Collection`接口是**List**接口、**Queue**接口以及**Set**接口的父接口,因**此該接口里定義的方法既可用于操作List集合,也可用于操作Queue集合和Set集合**

|方法聲明 |功能介紹|
|--|--|
|boolean add(E e); |向集合中添加對象|
|boolean addAll(Collection<? extends E> c)|用于將參數指定集合c中的所有元素添加到當前集合中|
|boolean contains(Object o); |判斷是否包含指定對象|
|boolean containsAll(Collection<?> c) |判斷是否包含參數指定的所有對象|
|boolean retainAll(Collection<?> c) |保留當前集合中存在且參數集合中存在的所有對象|
|boolean remove(Object o); |從集合中刪除對象|
|boolean removeAll(Collection<?> c) |從集合中刪除參數指定的所有對象|
|void clear(); |清空集合|
|int size();| 返回包含對象的個數|
|boolean isEmpty(); |判斷是否為空|
|boolean equals(Object o)| 判斷是否相等|
|int hashCode() |獲取當前集合的哈希碼值|
|Object[] toArray()| 將集合轉換為數組|
|Iterator iterator()| 獲取當前集合的迭代器|
* 因為Collection 是 最上級接口 因此 `ArrayList `類也具備接口方法實現,所以下面案例用`ArrayList ` 作為案例使用 接口方法
>[danger] ##### add/ addAll
~~~
import java.util.ArrayList;
import java.util.Collection;
public class CollectionTest {
public static void main(String[] args) {
// Collection c1 = new Collection(); // 接口不能實例化,也就是不能創建對象
// ArrayList 實現了接口 Collection 因此接口類型的引用指向實現類的對象,形成了多態
Collection arr = new ArrayList();
// 自動調用toString方法,調用ArrayList類中的toString方法,默認打印格式為:[元素值1, 元素值2, ...]
// 質上就是打印集合中的每個對象,也就是讓每個對象調用對應類的toString方法
System.out.println(arr); // []
// 1. ----- 使用add向集合中添加元素,add 添加需要是 對象類型 ,添加成功后返回布爾類型 ---------------
boolean b1 = false;
arr.add(new String("w"));
arr.add(Integer.valueOf(10));
arr.add(100); // 自動裝箱機制 將基本類型變成對象
// arr.add(new Person("name")); // 添加一些自定義類對象
b1 = arr.add("y"); // 保存常量字符串
System.out.println(b1); // true
int[] ls = { 1, 2, 3, 4, 5 };
arr.add(ls);
// Person 想讓自定義對象打印格式自定需要重寫toString 方法
// 沒有重新數組的toString 方法 因此打印出來是數組的內存地址
System.out.println(arr); // [w, 10, 100, y, [I@123772c4]
// 2. -------是用addAll 將一個集合中的值都添加到另一個集合中 --------
Collection arr1 = new ArrayList();
arr1.add("c");
arr1.addAll(arr);
System.out.println(arr1); // [c, w, 10, 100, y, [I@123772c4]
}
}
~~~
>[danger] ##### contains/ containsAll
1. `contains` 原理`Objects.equals(o, e)`,其中**o代表contains方法的形式參數,e代表集合中的每個元素**,對象與集合中已有對象的地址相同 或對象不為空,則對象調用equals方法與集合中已有元素相等(比較的方式調用Objects中的equals方法,自定義對象可以重寫equals方法)
~~~
public static boolean equals(Object a, Object b) {
return (a == b) || (a != null && a.equals(b));
}
~~~
~~~
import java.util.ArrayList;
import java.util.Collection;
public class CollectionTest {
public static void main(String[] args) {
Collection arr = new ArrayList();
arr.add("2");
arr.add(2);
// contains 判斷集合中是否包含參數指定的單個元素
boolean b1 = arr.contains("2");
System.out.println(b1); // true
// 判斷當前集合中是否包含參數指定集合的所有元素
Collection arr1 = new ArrayList();
arr1.add(2);
// arr["2" , 2] 中的元素是否都存在arr1 [2]中
System.out.println(arr1.containsAll(arr)); // false
// arr1 [ 2] 中的元素是否都存在arr ["2" , 2] 中
System.out.println(arr.containsAll(arr1)); // true
}
}
~~~
>[danger] ##### retainAll -- 交集
1. 計算兩個集合的交集并保留到當前集合中,如果生成新的集合返回`true `否則`false`
~~~
import java.util.ArrayList;
import java.util.Collection;
public class CollectionTest {
public static void main(String[] args) {
Collection arr = new ArrayList();
arr.add(1);
Collection arr1 = new ArrayList();
arr1.add(2);
arr1.add(3);
arr1.add(4);
boolean b = arr.retainAll(arr1);
System.out.println(b); // true 沒有交集導致arr 被更新為空集合 []
System.out.println(arr); // []
// ------------------------------------
Collection arr2 = new ArrayList();
arr2.add(1);
arr2.add(3);
Collection arr3 = new ArrayList();
arr3.add(2);
arr3.add(3);
arr3.add(4);
b = arr2.retainAll(arr3);
System.out.println(b); // true 沒有交集導致arr 被更新為空集合 [3]
System.out.println(arr2); // [3]
b = arr3.retainAll(arr3);
System.out.println(b); // false 自己和自己交集沒有值改變
}
}
~~~
>[danger] ##### remove/removeAll
1. remove方法的工作原理:Objects.equals(o, e)
~~~
import java.util.ArrayList;
import java.util.Collection;
public class CollectionTest {
public static void main(String[] args) {
Collection arr = new ArrayList();
arr.add(1);
arr.add(12);
arr.add(122);
// 刪除單個元素 remove方法的工作原理:Objects.equals(o, e)
boolean b = arr.remove(1);
// 刪除存在返回true
System.out.println("b = " + b); // b = true
System.out.println("arr = " + arr); // arr = [12, 122]
b = arr.remove("one");
// 刪除不存在返回false
System.out.println("b = " + b); // false
System.out.println("arr = " + arr); // arr = [12, 122]
Collection arr1 = new ArrayList();
arr1.add(12);
b = arr.removeAll(arr1);
System.out.println("b = " + b); // b = true
System.out.println("arr = " + arr); // arr = [122]
}
}
~~~
>[danger] ##### clear / size /isEmpty /equals
~~~
import java.util.ArrayList;
import java.util.Collection;
public class CollectionTest {
public static void main(String[] args) {
Collection arr = new ArrayList();
arr.add(1);
arr.add(12);
arr.add(122);
// 是否為空
boolean b = arr.isEmpty();
System.out.println(b); // false
// 獲取個數
int size = arr.size();
System.out.println(size); // 3
// 清空集合中的所有元素
arr.clear();
b = arr.isEmpty();
System.out.println(b); // true
arr.add(4);
arr.add(5);
Collection arr1 = new ArrayList();
arr1.add(4);
arr1.add(5);
// 兩個集合并判斷是否相等
b = arr1.equals(arr);
System.out.println(b); // true
}
}
~~~
>[danger] ##### 集合 數組互相轉換 -- toArray
1. 通常認為:集合是用于取代數組的結構,因為Object 是所有對象父類因此是**Object 數組類型**
~~~
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
public class CollectionTest {
public static void main(String[] args) {
Collection arr = new ArrayList();
arr.add(1);
arr.add(12);
arr.add(122);
// 實現集合和數組類型之間的轉換 通常認為:集合是用于取代數組的結構
// 實現集合向數組類型的轉換
Object[] objects = arr.toArray();
System.out.println("數組中的元素有:" + Arrays.toString(objects)); // 數組中的元素有:[1, 12, 122]
// 實現數組類型到集合類型的轉換
Collection objects1 = Arrays.asList(objects);
System.out.println("集合中的元素有:" + objects1); // 集合中的元素有:[1, 12, 122]
}
}
~~~
- windows -- 環境變量
- Vscode -- 編寫java
- 初始java
- java -- 關鍵字
- 編寫第一個java程序
- java -- 注釋
- 計算機存儲 -- 進制
- java -- 類型
- java -- 變量
- 數字類型
- 布爾類型
- 字符類型
- 類型轉換
- 雙等比較是什么
- java -- 運算符
- 算數運算符
- 字符串拼接
- 關系/比較運算符
- 自增減運算符
- 邏輯運算符
- 三目運算
- 賦值運算符
- 移位運算符
- 位運算符
- 運算符優先級
- java -- 流程控制語句
- if /else if /if -- 判斷
- switch case分支結構
- for -- 循環
- 用雙重for循環
- while -- 循環
- do while -- 循環
- 案例練習
- java -- 數組
- 數組的存儲
- 數組的增刪改查
- 數組的特點
- 數組案例
- 二維數組
- 數組的工具方法
- java -- 方法
- java -- 方法的重載
- java -- 方法的調用流程
- java -- 類方法傳參注意事項
- java -- 方法練習案例
- 對比 return break continue
- for each循環
- java -- 基礎練習
- java -- 面向對象
- java -- 創建類和對象
- java -- 訪問控制符
- java -- 類成員方法
- java -- 構造方法
- java -- this
- java -- 封裝
- java -- 對象內存圖
- java -- 創建對象案例
- java -- static
- java -- 繼承
- super -- 關鍵字
- java -- 構造塊和靜態代碼塊
- java -- 重寫
- java -- final
- java -- 多態
- java -- 抽象類
- java -- 接口
- 引用類型數據轉換
- 綜合案例
- java -- 內部類
- java -- 回調模式
- java -- 枚舉類型
- java -- switch 使用枚舉
- java -- 枚舉方法使用
- java -- 枚舉類實現接口
- java -- javaBean
- java -- package 包
- java -- import
- java -- 遞歸練習
- java -- 設計模式
- 單例模式
- java -- 注解
- java -- 元注解
- Java -- 核心類庫
- java -- 處理字符串
- Java -- String
- String -- 常用方法
- String -- 正則
- Java -- StringBuilder 和 StringBuffer
- 知識點
- Java -- StringJoiner 字符串拼接
- 練習題
- 字符串的總結
- Java -- 包裝類
- Integer
- Double
- Boolean
- Character
- java -- 集合類
- java -- util.Collection
- Iterator接口
- java -- util.List
- java -- ArrayList
- java -- util.Queue
- java -- util.Set
- java -- util.Map
- java -- util.Collections
- Java -- Math
- Java -- java.lang
- Java -- Object
- Java -- 獲取當前時間戳
- Java -- 異常
- Java -- java.util
- java -- Date
- java -- Calender
- Java -- java.text
- Java -- SimpleDateFormat
- Java -- java.time
- Java -- java.io
- java -- io.File
- java -- 泛型
- IDEA -- 用法