集合
Collection瘤旨、List巷懈、Set均為接口,其余為實現(xiàn)類
集合概述
- 集合與數(shù)組都是容器
- 數(shù)組的特點
- 數(shù)組定義完成并啟動后,類型確定,長度固定
- 在進行增刪數(shù)據(jù)操作的時候,數(shù)組是不太合適的关划,增刪數(shù)據(jù)都需要放棄原有數(shù)組或者移位
- 數(shù)組適合的場景
- 當業(yè)務(wù)數(shù)據(jù)的個數(shù)是固定的,且都是同一批數(shù)據(jù)類型的時候翘瓮,可以采取定義數(shù)組存儲
- 集合的特點
- 集合的大小不固定贮折,啟動后可以動態(tài)變化,類型也可以選擇不固定的资盅,集合更像氣球
- 集合非常適合做元素的增刪操作
- 注意调榄,集合中只能存儲引用類型數(shù)據(jù),如果要存儲基本類型的數(shù)據(jù)呵扛,可以選擇使用包裝類
- 集合適合的場景
- 數(shù)組的個數(shù)不確定每庆,需要進行增刪元素的時候
Collection集合的體系特點
-
集合
-
Collection(單列)
- Collection單列集合,每個元素(數(shù)據(jù))只包含一個值
-
map(雙列)
- Map雙列集合今穿,每個元素包含兩個值(鍵值對)
-
-
Cowllection(單列集合的祖宗接口)
- List
- ArrayList
- LinkedList
- Set
- HashSet
- LinkedHashSet
- TreeSet
- HashSet
- List
-
Collection集合的特點
- List系列集合:添加的元素是有序的缤灵,可重復(fù)的,有索引
- Set系列集合:添加的元素是無序蓝晒,不重復(fù)腮出,無索引
- HashSet:無序,不重復(fù)芝薇,無索引
- LinkedHasgSet:有序胚嘲,不重復(fù),無索引
- TreeSet:按照大小默認升序排序洛二,不重復(fù)馋劈,無索引
- HashSet:無序,不重復(fù)芝薇,無索引
-
集合對于泛型的支持
-
集合都是支持泛型的,可以在編譯階段約束集合只能操作某種數(shù)據(jù)類型
Collection<String> lists = new ArrayList<String>(); Collection<String> lists = new ArrayList<>(); //JDK1.7開始后面的泛型類型申明可以省略不寫
注意:集合和泛型都只支持引用數(shù)據(jù)類型晾嘶,不支持基本數(shù)據(jù)類型妓雾,所以集合中存儲的元素都認為是對象
必須使用基本數(shù)據(jù)類型時,可以使用基本數(shù)據(jù)類型的包裝類
-
-
綜合代碼
package com.java.collection; import java.util.ArrayList; import java.util.Collection; import java.util.HashSet; /** * Collection集合的特點 */ public class CollectionDemo01 { public static void main(String[] args) { // 以ArrayList為例: 有序 可重復(fù) 有索引 Collection list = new ArrayList(); // 子類對象給到父類接口变擒,這是一種多態(tài)的寫法 list.add("Java"); list.add("Java"); list.add("MyBatis"); list.add(123); list.add(123); list.add(false); list.add(false); System.out.println(list); // 集合本身重寫了toString()方法 //[Java, Java, MyBatis, 123, 123, false, false] System.out.println("-------------"); // 以HashSet為例:無序 不重復(fù) 無索引 Collection list1 = new HashSet(); // 子類對象給到父類接口君珠,這是一種多態(tài)的寫法 list1.add("Java"); list1.add("Java"); list1.add("MyBatis"); list1.add(123); list1.add(123); list1.add(false); list1.add(false); System.out.println(list1); // 集合本身重寫了toString()方法 // [Java, false, MyBatis, 123] System.out.println("-------------"); // Collection<String> list2 = new ArrayList<String>(); Collection<String> list2 = new ArrayList<String>(); list2.add("Java"); // list2.add(23); 不滿足String泛型約束 list2.add("MyBatis"); // Collection<int> list3 = new ArrayList(); // 需要使用對應(yīng)的基本數(shù)據(jù)類型的包裝類 Collection<Integer> list3 = new ArrayList(); list3.add(23); // 此時添加的23不再是int型寝志,實際上是Integer類型的包裝類 list3.add(32); Collection<Double> list4 = new ArrayList(); list4.add(23.33); // 此時添加的23.33不再是double型的基本類型數(shù)據(jù)娇斑,而是Double類型的引用類型數(shù)據(jù) list4.add(33.33); } }
Collection集合常用API
Collection是單列集合的祖宗接口策添,它的功能是全部單列集合都可以繼承使用的
-
Collection常用API如下:
方法名稱 說明 public boolean add(E e) 把給定的對象添加到當前集合中 public void clear() 清空集合中所有的元素 public boolean remove(E e) 把給定的對象在當前集合中刪除 public boolean contains(Object, ob) 判斷當前集合中是否包含給定的對象 public boolean inEmpty() 判斷當前集合是否為空 public int size() 返回集合中元素的個數(shù) public Object[] toArray() 把集合中的元素,存儲到數(shù)組中 public boolean addAll(int index, Collection c) 將給定集合中的所有元素添加到另一個集合中去毫缆,其中index是可選參數(shù)(前提是list家族)唯竹,代表插入的位置,c表示傳入一個集合 -
測試代碼:
package com.java.collection; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.HashSet; /** * Collection常用API */ public class CollectionDemo02 { public static void main(String[] args) { // HashSet添加元素是 無序 不重復(fù) 無索引 Collection<String> list = new HashSet<>(); // 1. 添加元素苦丁,添加成功返回true list.add("Java"); list.add("CSS"); list.add("CSS"); list.add("MySQL"); list.add("MyBatis"); list.add("Spring"); System.out.println(list); // [Java, CSS, MySQL, MyBatis, Spring] // 2. 清空集合的元素 list.clear(); System.out.println(list); // [] // 3. 判斷集合是否為空浸颓,是空返回true System.out.println(list.isEmpty()); // true // 4. 獲取集合的大小 list.add("Java"); list.add("CSS"); list.add("CSS"); list.add("MySQL"); list.add("MyBatis"); list.add("Spring"); System.out.println(list.size()); // 5 // 5. 判斷集合中是否包含某個元素 System.out.println(list.contains("Java")); // true System.out.println(list.contains("Node")); // false // 6. 刪除某個元素:如果有多個重復(fù)元素默認刪除前面的第一個 System.out.println(list.remove("CSS")); System.out.println(list); // [Java, MySQL, MyBatis, Spring] // 只有l(wèi)ist家族才可以使用元素索引刪除,這里只是名字為list和list家族沒有關(guān)系 // 7. 把集合轉(zhuǎn)換成數(shù)組 // 轉(zhuǎn)成Object類的數(shù)組是因為即使使用了泛型約束規(guī)定集合里面的數(shù)組都是String旺拉,但是产上,事實上也存在 // 特殊的技術(shù),使得即使有泛型約束也可以插入其他數(shù)據(jù)類型的元素 // 因此為了防止這種情況蛾狗,統(tǒng)一轉(zhuǎn)換成Object類型晋涣,這樣就向下兼容了所有類型的數(shù)據(jù) Object[] arr = list.toArray(); System.out.println("數(shù)組" + Arrays.toString(arr)); // 8. 合并兩個集合的元素 Collection<String> c1 = new ArrayList<String>(); c1.add("Java1"); c1.add("Java2"); Collection<String> c2 = new ArrayList<String>(); c2.add("Java3"); c2.add("Java4"); // addAll是將一個數(shù)組的元素拷貝到另一個數(shù)組中去,而不是剪切沉桌,即“倒入” c1.addAll(c2); System.out.println(c1); System.out.println(c2); } }