Collection
Collection 集合概述和使用
-
Collection集合概述
-
是單例集合的頂層接口,它表示一組對象,這些對象也稱為Collection的元素
-
JDK 不提供此接口的任何直接實現.它提供更具體的子接口(如Set和List)實現
-
-
創建Collection集合的對象
-
多態的方式
-
具體的實現類ArrayList
-
-
Collection集合常用方法
方法名 說明 boolean add(E e) 添加元素 boolean remove(Object o) 從集合中移除指定的元素 boolean removeIf(Object o) 根據條件進行移除 void clear() 清空集合中的元素 boolean contains(Object o) 判斷集合中是否存在指定的元素 boolean isEmpty() 判斷集合是否為空 int size() 集合的長度,也就是集合中元素的個數
collection集合體系圖
各類使用場景
collection三種通用的遍歷方式
1. 迭代器(不依賴索引)
介紹
-
迭代器,集合的專用遍歷方式
-
Iterator<E> iterator(): 返回此集合中元素的迭代器,通過集合對象的iterator()方法得到
三個主要的方法:
-
boolean hasNext()
: 檢查是否還有下一個元素。 -
Object next()
: 返回下一個元素。 -
void remove()
: 刪除迭代器最后一次返回的元素。
使用迭代器遍歷集合的基本步驟如下:
-
獲取集合的迭代器對象。
-
使用
hasNext()
方法檢查是否還有下一個元素。 -
使用
next()
方法獲取下一個元素。 -
重復步驟2和3,直到沒有更多元素。
下面是一個使用迭代器遍歷ArrayList的簡單示例:
?
import java.util.ArrayList;import java.util.Iterator;?public class IteratorExample {public static void main(String[] args) {// 創建一個ArrayList對象ArrayList<String> list = new ArrayList<>();list.add("元素1");list.add("元素2");list.add("元素3");?// 獲取迭代器Iterator<String> iterator = list.iterator();?// 使用迭代器遍歷ArrayListwhile (iterator.hasNext()) {String element = iterator.next();System.out.println(element);}?// 嘗試刪除元素(可選)if (iterator.hasNext()) {iterator.next();iterator.remove(); // 刪除最后一個訪問的元素}?// 再次遍歷ArrayList,觀察刪除效果System.out.println("刪除元素后:");iterator = list.iterator();while (iterator.hasNext()) {String element = iterator.next();System.out.println(element);}}}
注意事項:
-
迭代器遍歷完畢,指針不會復位。
-
循環中只能用一次next方法,因為用兩次next方法可能回導致指針越界。
-
next和hasnext方法要配套使用。
-
迭代器遍歷時,不能用集合調用remove方式進行刪除,要調用iterator中的方式進行刪除。
增強for循環
介紹
-
它是JDK5之后出現的,其內部原理是一個Iterator迭代器
-
實現Iterable接口的類才可以使用迭代器和增強for
-
簡化數組和Collection集合的遍歷
基本語法如下:
?for (元素類型 元素變量 : 集合或數組) { ? ?// 循環體}
例如,遍歷一個ArrayList:
?aList<String> list = new ArrayList<>();list.add("Apple");list.add("Banana");list.add("Cherry");for (String fruit : list) {System.out.println(fruit);}
注意事項:
-
增強for循環只能用于遍歷,不能用于添加或刪除元素。在循環體內對集合進行修改(如add或remove)可能會引發
ConcurrentModificationException
異常。 -
對于基本數據類型,如int、double等,需要在前面聲明一個對應的包裝類型變量,如Integer、Double等。
Lambda表達式
Lambda表達式是Java 8引入的一種新特性,主要用于表示匿名函數。在遍歷集合時,常與Stream API
結合使用。基本語法如下:
?集合.stream().forEach(元素 -> { ? ?// 對元素進行操作});
例如,遍歷一個ArrayList并打印每個元素:
public class A07_CollectionDemo7 {public static void main(String[] args) {/* lambda表達式遍歷:default void forEach(Consumer<? super T> action):*/?//1.創建集合并添加元素Collection<String> coll = new ArrayList<>();coll.add("zhangsan");coll.add("lisi");coll.add("wangwu");//2.利用匿名內部類的形式//底層原理://其實也會自己遍歷集合,依次得到每一個元素//把得到的每一個元素,傳遞給下面的accept方法//s依次表示集合中的每一個數據/* coll.forEach(new Consumer<String>() {@Overridepublic void accept(String s) {System.out.println(s);}});*/?//lambda表達式coll.forEach(s -> System.out.println(s));}}
注意事項:
-
Lambda表達式主要用于函數式編程,適用于對集合進行復雜操作,如過濾、映射、排序等。對于簡單的遍歷操作,增強for循環可能更加直觀和高效。
-
Lambda表達式在遍歷過程中同樣不能修改集合,否則會引發異常。
-
Lambda表達式中的
->
操作符左側是參數列表,右側是Lambda體。如果Lambda體只有一條語句,可以省略大括號和分號。 -
Lambda表達式可以引用外部變量,但這些變量必須是final或等效于final的(即未被修改過)。