Java中的Collection

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(): 刪除迭代器最后一次返回的元素。

使用迭代器遍歷集合的基本步驟如下:
  1. 獲取集合的迭代器對象。

  2. 使用hasNext()方法檢查是否還有下一個元素。

  3. 使用next()方法獲取下一個元素。

  4. 重復步驟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);}
注意事項
  1. 增強for循環只能用于遍歷,不能用于添加或刪除元素。在循環體內對集合進行修改(如add或remove)可能會引發ConcurrentModificationException異常。

  2. 對于基本數據類型,如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));}}
注意事項
  1. Lambda表達式主要用于函數式編程,適用于對集合進行復雜操作,如過濾、映射、排序等。對于簡單的遍歷操作,增強for循環可能更加直觀和高效。

  2. Lambda表達式在遍歷過程中同樣不能修改集合,否則會引發異常。

  3. Lambda表達式中的->操作符左側是參數列表,右側是Lambda體。如果Lambda體只有一條語句,可以省略大括號和分號。

  4. Lambda表達式可以引用外部變量,但這些變量必須是final或等效于final的(即未被修改過)。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/716032.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/716032.shtml
英文地址,請注明出處:http://en.pswp.cn/news/716032.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

leetcode - 71. Simplify Path

Description Given a string path, which is an absolute path (starting with a slash ‘/’) to a file or directory in a Unix-style file system, convert it to the simplified canonical path. In a Unix-style file system, a period ‘.’ refers to the current di…

MATLAB環境下基于熵的聲納圖像分割算法

聲納圖像作為準確獲取水下信息的重要途徑之一&#xff0c;在國防、軍事、工程等方面發揮著巨大作用。然而&#xff0c;由于水聲信道的復雜多變和聲波本身的傳播損失&#xff0c;聲納圖像往往呈現出分辨率和對比度不高、噪聲干擾嚴重、目標輪廓模糊等特點。 聲納圖像的分割指的…

FCIS 2023網絡安全創新大會:洞察前沿技術,探索安全新境界(附大會核心PPT下載)

隨著信息技術的飛速發展&#xff0c;網絡安全問題日益凸顯&#xff0c;成為全球關注的焦點。作為網絡安全領域的重要盛會&#xff0c;FCIS 2023網絡安全創新大會如期而至&#xff0c;匯聚了全球網絡安全領域的頂尖專家、學者、企業家和政策制定者&#xff0c;共同探討網絡安全的…

備戰藍橋杯————差分數組1

引言 一、差分數組 什么是差分數組 差分數組的作用 Java代碼實現差分數組 二、 區間加法 題目描述 代碼與解題思路 總結 引言 在數字世界的海洋中&#xff0c;數據是構建和優化算法的基石。然而&#xff0c;當我們面對需要頻繁進行區間操作的數組時&#xff0c;傳統的逐元素…

ABAP - SALV教程10 添加可編輯checkbox列

幾乎所有的功能報表都會有那么一個選擇列&#xff0c;問了業務顧問&#xff0c;業務顧問說是用戶不習慣使用報表原生的選擇模式。效果圖SALV的選擇列是通過將列設置成checkbox_hotspot樣式&#xff0c;注冊單擊事件完成勾選功能的。完成步驟 將SEL列設置成checkbox_hotspot樣式…

【筆記】OpenHarmony和HarmonyOS區別及應用開發簡介

一、概念 OpenHarmony(OH) &#xff1a; OpenAtom OpenHarmonyHarmonyOS(HO)&#xff1a;開發 | 華為開發者聯盟 (huawei.com) HO當前最高是3.1&#xff0c;在華為mate 60上面也是。關于4.0、5.0和next這類版本說法都是面向用戶的&#xff0c;不是開發人員。對于程序員&#…

Springboot 項目讀取yaml的配置文件信息給靜態方法使用,以及通過配置 ResourceBundle 類讀取config.properties

讀取yaml 的配置文件 配置文件信息 iot_saas_tenement:user_id: 7........8d9bprivate_key: MII.......qQbj_url: http://4.....5:8088project_name: iot_s.......rojectdevice_name: te.....ice 創建一個類 ProxyProperties 讀取配置文件信息&#xff0c;并對外提供get方法 …

內存的檢測與排查

內存&#x1f40e;的檢測與排查 文章目錄 內存&#x1f40e;的檢測與排查查殺Java Web filter型內存馬0x01 內存馬簡歷史0x02 查殺思路0x03 內存馬的識別0x04 內存馬的查殺 查殺Java Web filter型內存馬 0x01 內存馬簡歷史 其實內存馬由來已久&#xff0c;早在17年n1nty師傅的…

QT6 libModbus 用于ModbusTcp客戶端讀寫服務端

雖然在以前的文章中多次描述過,那么本文使用開源庫libModbus,可得到更好的性能&#xff0c;也可移植到各種平臺。 性能&#xff1a;讀1次和寫1次約各用時2ms。 分別創建了讀和寫各1個連接指針&#xff0c;用于讀100個寄存器和寫100個寄存器&#xff0c;讀寫分離。 客戶端&am…

物聯網與智慧城市:科技驅動下的城市智能化升級之路

一、引言 隨著科技的不斷進步和城市化進程的加速&#xff0c;物聯網與智慧城市的結合已經成為推動城市智能化升級的關鍵力量。物聯網技術以其強大的連接和數據處理能力&#xff0c;為智慧城市的建設提供了無限可能。本文旨在探討物聯網如何助力智慧城市的構建&#xff0c;以及…

SLAM ORB-SLAM2(21)基礎矩陣的計算和評分

SLAM ORB-SLAM2&#xff08;21&#xff09;基礎矩陣的計算和評分 1. 前言2. 基礎矩陣2.1. 對級約束2.2. 推導2.3. 計算原理 3. ComputeF214. CheckFundamental 1. 前言 在 《SLAM ORB-SLAM2&#xff08;20&#xff09;查找基礎矩陣》 中了解到 查找基礎矩陣主要過程&#xff1…

web基礎03-JavaScript

目錄 一、JavaScript基礎 1.變量 2.輸出 3.變量提升 4.區塊 5.JavaScript數據類型 6.查看數值類型 7.undefined和null 8.布爾值 9.和的區別 10.算數/三元/比較/邏輯/賦值運算符 11.特殊字符 12.字符串 &#xff08;1&#xff09;獲取字符串長度 &#xff08;2&am…

備戰藍橋杯Day21 - 堆排序的內置模塊+topk問題

一、內置模塊 在python中&#xff0c;堆排序已經設置好了內置模塊&#xff0c;不想自己寫的話可以使用內置模塊&#xff0c;真的很方便&#xff0c;但是堆排序算法的底層邏輯最好還是要了解并掌握一下的。 使用heapq模塊的heapify()函數將列表轉換為堆&#xff0c;然后使用he…

41、網絡編程/TCP.UDP通信模型練習20240301

一、編寫基于TCP的客戶端實現以下功能&#xff1a; 通過鍵盤按鍵控制機械臂&#xff1a;w(紅色臂角度增大)s&#xff08;紅色臂角度減小&#xff09;d&#xff08;藍色臂角度增大&#xff09;a&#xff08;藍色臂角度減小&#xff09;按鍵控制機械臂 1.基于TCP服務器的機械臂…

Java 創建對象有哪幾種方式

1. 使用new關鍵字&#xff1a;這是最常見和最簡單的創建對象的方式。你可以通過這種方式調用任意的構造函數&#xff0c;無論是無參的還是有參數的構造函數。 例如&#xff1a; Student stu new Student 2. 使用Class類的newInstance方法&#xff08;反射&#xff09; 這種…

Python3零基礎教程之數學運算專題進階

大家好,我是千與編程,今天已經進入我們Python3的零基礎教程的第十節之數學運算專題進階。上一次的數學運算中我們介紹了簡單的基礎四則運算,加減乘除運算。當涉及到數學運算的 Python 3 刷題使用時,進階課程包含了許多重要的概念和技巧。下面是一個簡單的教程,涵蓋了一些常…

勒索軟件類型

勒索軟件類型 加密勒索軟件 它使個人文件和文件夾&#xff08;文檔、電子表格、圖片和視頻&#xff09;被加密。受感染的文件被加密后會被刪除&#xff0c;用戶通常會在當下無法使用的文件的文件夾中看到一個包含付款說明的文本文件。當您嘗試打開其中一個加密文件時,您才可能…

Tomcat負載均衡、動靜分離

目錄 引言 實驗圖解 1.實驗環境搭建 2.部署Nginx服務器及配置靜態頁面Web服務 3.部署Tomcat服務及配置動態頁面Web服務 4.實驗驗收 動態頁面 靜態頁面 引言 tomcat服務既可以處理動態頁面&#xff0c;也可以處理靜態頁面&#xff1b;但其處理靜態頁面的速度遠遠不如…

Oracle SQL優化概念之集群因子解析

導讀 本文介紹一個Oracle 數據庫SQL優化的一個基本概念【集群因子】&#xff0c;理解了此概念&#xff0c;有助于對Oracle數據庫進行SQL優化。 1. 集群因子名詞解析 集群因子&#xff08;ClusteringFactor&#xff09;是如果通過一個索引掃描一張表&#xff0c;需要訪問的表的數…

js優雅的統計字符串字符出現次數

題目如下 統計一串字符串中每個字符出現的頻率 示例字符串 let str asdfasqwerqwrdfafafasdfopasdfopckpasdfassfd小白寫法 let str asdfasqwerqwrdfafafasdfopasdfopckpasdfassfdlet result {}; for (let i 0; i < str.length; i) {if (result[str[i]]) {result[str[…