集合遍歷的多種方式

目錄

1.增強for

2.迭代器(在遍歷的過程中需要刪除元素,請使用迭代器)

3.雙列集合

4.Lambda表達式(forEach方法)

1.單列集合:

2.雙列集合:

4.Stream 流

5.普通for循環

6.列表迭代器

7.總結


1.增強for

注:增強for遍歷集合的內部不要對集合本身做更改,如remove。

如:

for (EnergyWorkshop energyWorkshop : energyWorkshopList) {//根據車間名稱查詢車間信息EnergyWorkshop energyWorkshop1 = energyWorkshopMapper.selectWorkshopByWorkshopName(energyWorkshop.getWorkshopName());if(ObjectUtil.isNotNull(energyWorkshop1)){//String workshopName = energyWorkshop1.getWorkshopName();energyWorkshopList3.add(energyWorkshop1);//移除掉和數據庫的數據同名稱的energyWorkshopList.remove(energyWorkshop);}
}

在遍歷energyWorkshopList同時對其進行修改(通過remove方法)。這是非常危險,因為在迭代過程中修改集合會導致ConcurrentModificationException(并發修改異常)。這是因為Java的迭代器在迭代開始時會記錄一個快照(稱為modCount),當集合被修改時,這個快照會改變。如果迭代器發現快照與它開始迭代時的快照不匹配,就會拋出ConcurrentModificationException

可以用迭代器解決!

Iterator<EnergyWorkshop> iterator = energyWorkshopList.iterator();
while (iterator.hasNext()) {EnergyWorkshop energyWorkshop = iterator.next();EnergyWorkshop energyWorkshop1 = energyWorkshopMapper.selectWorkshopByWorkshopName(energyWorkshop.getWorkshopName());if (ObjectUtil.isNotNull(energyWorkshop1)) {energyWorkshopList3.add(energyWorkshop1);iterator.remove(); //安全地刪除元素}
}

2.迭代器(在遍歷的過程中需要刪除元素,請使用迭代器)

迭代器在遍歷集合的時候是不依賴索引的。

舉例:


迭代器的細節注意點:

1.報錯NoSuchElementException

2.迭代器遍歷完畢,指針不會復位(如果還想第二次遍歷集合,則需要再次創建一個新的迭代器來遍歷)

3.循環中只能用一次next方法(next()方法 和 hasNext()方法 使用的時候要一一對應)

4.迭代器遍歷時,不能用集合的方法進行增加或者刪除。(應該用迭代器的方法去操作)

3.雙列集合

以上兩種方法都是適用于單列集合,雙列集合使用的話要先做一些前置操作

(提取"鍵"或者提取"鍵值對")

4.Lambda表達式(forEach方法)

1.單列集合:
list.forEach(new Consumer<String>() {@Overridepublic void accept(String s) {System.out.println(s);}
});//lambda表達式形式
list.forEach(s -> System.out.println(s));//Set集合
set.forEach( s -> System.out.println(s));

List單列集合:forEach方法的底層是普通for循環

Set單列集合:forEach方法的底層是增強for

2.雙列集合:
map.forEach(new Biconsumer<String, String>() {@Overridepublic void accept(string key, string value) {System.out.println(key + "=" + value);}
});
map.forEach((key, value) -> System.out.println(key + "=" + value));

方法的底層:entrySet()方法 + 增強for + getKey() + getValue()

4.Stream 流

本質就是Lambda表達式。。。

5.普通for循環

只有 List接口下的集合 有索引,所以只有List集合能使用普通for循環去遍歷

6.列表迭代器

只有List接口下的集合才可以用這種方法遍歷。

舉例:

獲取一個列表迭代器的對象,里面的指針默認也是指向0索引的。

列表迭代器相比迭代器的特殊之處:

它額外添加了一個方法:在遍歷的過程中,可以添加元素。

ListIterator<string> it = list.listIterator();
while(it.hasNext()){String str = it.next();if("bbb".equals(str)){it.add("qqq");}
}
System.out.println(list);

7.總結

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

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

相關文章

DeepSeek在MATLAB上的部署與應用

在科技飛速發展的當下&#xff0c;人工智能與編程語言的融合不斷拓展著創新邊界。DeepSeek作為一款備受矚目的大語言模型&#xff0c;其在自然語言處理領域展現出強大的能力。而MATLAB&#xff0c;作為科學計算和工程領域廣泛應用的專業軟件&#xff0c;擁有豐富的工具包和高效…

value_counts()和unique()

我今天發現一個很有意思的問題哈 import scanpy as sc import numpy as npX np.random.randn(10,3) adata1 sc.AnnData(X) adata1.obs["sample"] "H1" print(adata1)X np.random.randn(20,3) adata2 sc.AnnData(X) adata2.obs["sample"] &…

每日OJ_牛客_游游的字母串_枚舉_C++_Java

目錄 牛客_游游的字母串_枚舉 題目解析 C代碼 Java代碼 牛客_游游的字母串_枚舉 游游的字母串 描述&#xff1a; 對于一個小寫字母而言&#xff0c;游游可以通過一次操作把這個字母變成相鄰的字母。a和b相鄰&#xff0c;b和c相鄰&#xff0c;以此類推。特殊的&#xff0…

【AI深度學習基礎】Pandas完全指南入門篇:數據處理的瑞士軍刀 (含完整代碼)

&#x1f4da; Pandas 系列文章導航 入門篇 &#x1f331;進階篇 &#x1f680;終極篇 &#x1f30c; &#x1f4cc; 一、引言 在大數據與 AI 驅動的時代&#xff0c;數據預處理和分析是深度學習與機器學習的基石。Pandas 作為 Python 生態中最強大的數據處理庫&#xff0c;以…

數字萬用表的使用教程

福祿克經濟型數字萬用表前面板按鍵功能介紹示意圖 1. 萬用表簡單介紹 萬用表是一種帶有整流器的、可以測量交、直流電流、電壓及電阻等多種電學參量的磁電式儀表。分為數字萬用表&#xff0c;鉗形萬用表&#xff0c; &#xff08;1&#xff09;表筆分為紅、黑二只。使用時黑色…

C# IComparable<T> 使用詳解

總目錄 前言 在C#編程中&#xff0c;IComparable<T> 是一個非常重要的接口&#xff0c;它允許我們為自定義類型提供默認的比較邏輯。這對于實現排序、搜索和其他需要基于特定規則進行比較的操作特別有用。本文將詳細介紹 IComparable<T> 的使用方法、應用場景及其…

DeepSeek使用手冊分享-附PDF下載連接

本次主要分享DeepSeek從技術原理到使用技巧內容&#xff0c;這里展示一些基本內容&#xff0c;后面附上詳細PDF下載鏈接。 DeepSeek基本介紹 DeepSeek公司和模型的基本簡介&#xff0c;以及DeepSeek高性能低成本獲得業界的高度認可的原因。 DeepSeek技術路線解析 DeepSeek V3…

Hugging Face 推出 FastRTC:實時語音視頻應用開發變得得心應手

估值超過 40 億美元的 AI 初創公司 Hugging Face 推出了 FastRTC&#xff0c;這是一個開源 Python 庫&#xff0c;旨在消除開發者在構建實時音頻和視頻 AI 應用時的主要障礙。 "在 Python 中正確構建實時 WebRTC 和 Websocket 應用一直都很困難&#xff0c;"FastRTC…

for循環相關(循環的過程中對數據進行刪除會踩坑)

# 錯誤方式&#xff0c; 有坑&#xff0c;結果不是你想要的。 user_list ["劉的話", "范德彪", "劉華強", 劉尼古拉斯趙四, "宋小寶", "劉能"] for item in user_list: if item.startswith("劉"): …

Qt顯示一個hello world

一、顯示思路 思路一&#xff1a;通過圖形化方式&#xff0c;界面上創建出一個控件顯示。 思路二&#xff1a;通過編寫C代碼在界面上創建控件顯示。 二、思路一實現 點開 Froms 的 widget.ui&#xff0c;拖拽 label 控件&#xff0c;顯示 hello world 即可。 qmake 基于 .…

復合機器人為 CNC 毛坯件上下料注入 “智能強心針”

在競爭日益激烈的 CNC 加工行業&#xff0c;如何提升生產效率、保證產品質量、實現智能化生產成為眾多企業亟待解決的問題。富唯智能憑借其先進的復合機器人技術&#xff0c;成功為多家 CNC 加工企業提供了毛坯件上下料的優質解決方案&#xff0c;有效提升了生產效能&#xff0…

電商業務數據測試用例參考

1. 數據采集層測試 用例編號測試目標測試場景預期結果TC-001驗證用戶行為日志采集完整性模擬用戶瀏覽、點擊、加購行為Kafka Topic中日志記錄數與模擬量一致TC-002驗證無效數據過濾規則發送爬蟲請求&#xff08;高頻IP&#xff09;清洗后數據中無該IP的日志記錄 2. 數據處理層…

Spring Cloud Gateway 網關的使用

在之前的學習中&#xff0c;所有的微服務接口都是對外開放的&#xff0c;這就意味著用戶可以直接訪問&#xff0c;為了保證對外服務的安全性&#xff0c;服務端實現的微服務接口都帶有一定的權限校驗機制&#xff0c;但是由于使用了微服務&#xff0c;就需要每一個服務都進行一…

webstorm的Live Edit插件配合chrome擴展程序JetBrains IDE Support實現實時預覽html效果

前言 我們平時在前端網頁修改好代碼要點擊刷新再去看修改的效果&#xff0c;這樣比較麻煩&#xff0c;那么很多軟件都提供了實時預覽的功能&#xff0c;我們一邊編輯代碼一邊可以看到效果。下面說的是webstorm。 1 Live Edit 首先我們需要在webstorm的settings里安裝插件Live …

map的operator[]的實現

map的operator[]的實現 operator[]里包含插入操作&#xff0c;所以我們先看一下首先看一下map的insert函數 返回值是一個pair類型。正常的常見的insert&#xff0c;插入成功返回true&#xff0c;失敗返回false 這里設計的insert不單單返回布爾值&#xff0c;而是返回一個pair…

定時器的編碼器接口模式

選擇編碼器接口模式的方法是&#xff1a;如果計數器只在TI2的邊沿計數&#xff0c;則置TIMx_SMCR寄存器中的SMS001&#xff0c;如果只在TI1邊沿計數&#xff0c;則置SMS010&#xff0c;如果計數器同時在TI1和TI2邊沿計數&#xff0c;則置SMS 011 明確一點&#xff0c;計數器…

Openshift配置默認調度

配置默認調度選擇角色為worker的機器運行pod。 編輯scheduler oc edit schedulers.config.openshift.iospec:defaultNodeSelector: node-role.kubernetes.io/worker ## 添加這一段如果pod需要運行在非worker主機&#xff0c;需要配置pod所在的項目添加注解 openshift.io/node…

突破光學成像局限:全視野光學血管造影技術新進展

全視野光學血管造影&#xff08;FFOA&#xff09;作為一種實時、無創的成像技術&#xff0c;能夠提取生物血液微循環信息&#xff0c;為深入探究生物組織的功能和病理變化提供關鍵數據。然而&#xff0c;傳統FFOA成像方法受到光學鏡頭景深&#xff08;DOF&#xff09;的限制&am…

OpenHarmony 進階——HDF 驅動框架的原理小結

文章大綱 引言一、HDF的驅動加載&#xff08;驅動安裝&#xff09;方式1、動態加載&#xff08;主要是uhdf&#xff09;2、靜態加載(主要是khdf)2.1、驅動入口實現2.1.1、Bind接口2.1.2、Init接口2.1.3、Release接口 2.2、HDF_INIT 驅動入口符號2.3、獲取驅動列表2.4、獲取設備…

大模型應用:多輪對話(prompt工程)

概述 在與大型語言模型&#xff08;如ChatGPT&#xff09;交互的過程中&#xff0c;我們常常體驗到與智能助手進行連貫多輪對話的便利性。那么&#xff0c;當我們開啟一個新的聊天時&#xff0c;系統是如何管理聊天上下文的呢&#xff1f; 一、初始上下文的建立 1. 創建新會…