如何正確遍歷刪除List中的元素,你會嗎?
遍歷刪除List中的元素有很多種方法,當運用不當的時候就會產生問題。下面主要看看以下幾種遍歷刪除List中元素的形式:
1.通過增強的for迴圈刪除符合條件的多個元素
2.通過增強的for迴圈刪除符合條件的一個元素
3.通過普通的for刪除刪除符合條件的多個元素
4.通過Iterator進行遍歷刪除符合條件的多個元素
Java程式碼- /**
- * 使用增強的for迴圈
- * 在迴圈過程中從List中刪除元素以後,繼續迴圈List時會報ConcurrentModificationException
- */
- public void listRemove() {
- List<Student> students = this
- for (Student stu : students) {
- if (stu.getId() == 2)
- students.remove(stu);
- }
- }
- /**
- * 像這種使用增強的for迴圈對List進行遍歷刪除,但刪除之後馬上就跳出的也不會出現異常
- */
- public void listRemoveBreak() {
- List<Student> students = this.getStudents();
- for (Student stu : students) {
- if (stu.getId() == 2) {
- students.remove(stu);
- break;
- }
- }
- }
- /**
- * 這種遍歷有可能會遺漏某個元素,因為刪除元素後List的size在
- * 變化,元素的索引也在變化,比如你迴圈到第2個元素的時候你把它刪了,
- * 接下來你去訪問第3個元素,實際上訪問到的是原先的第4個元素。當訪問的元素
- * 索引超過了當前的List的size後還會出現陣列越界的異常,當然這裡不會出現這種異常,
- * 因為這裡每遍歷一次都重新拿了一次當前List的size。
- */
- public void listRemove2() {
- List<Student> students = this.getStudents();
- for (int i=0; i<students.size(); i++) {
- if (students.get(i).getId()%3 == 0) {
- Student student = students.get(i);
- students.remove(student);
- }
- }
- }
- /**
- * 使用Iterator的方式也可以順利刪除和遍歷
- */
- public void iteratorRemove() {
- List<Student> students = this.getStudents();
- System.out.println(students);
- Iterator<Student> stuIter = students.iterator();
- while (stuIter.hasNext()) {
- Student student = stuIter.next();
- if (student.getId() % 2 == 0)
- stuIter.remove();//這裡要使用Iterator的remove方法移除當前物件,如果使用List的remove方法,則同樣會出現ConcurrentModificationException
- }
- System.out.println(students);
- }
附完整程式碼如下:
Java程式碼- import java.util.ArrayList;
- import java.util.Iterator;
- import java.util.List;
- public class ListRemove {
- public static void main(String args[]) {
- ListRemove lr = new ListRemove();
- lr.listRemove();
- lr.listRemoveBreak();
- // lr.listRemove2();
- // lr.iteratorRemove();
- }
- /**
- * 使用增強的for迴圈
- * 在迴圈過程中從List中刪除元素以後,繼續迴圈List時會報ConcurrentModificationException
- */
- public void listRemove() {
- List<Student> students = this.getStudents();
- for (Student stu : students) {
- if (stu.getId() == 2)
- students.remove(stu);
- }
- }
- /**
- * 像這種使用增強的for迴圈對List進行遍歷刪除,但刪除之後馬上就跳出的也不會出現異常
- */
- public void listRemoveBreak() {
- List<Student> students = this.getStudents();
- for (Student stu : students) {
- if (stu.getId() == 2) {
- students.remove(stu);
- break;
- }
- }
- }
- /**
- * 這種不使用增強的for迴圈,每次重新獲取list的size遍歷的情況執行時不會報錯,但是可能刪除的結果是錯的。
- */
- public void listRemove2() {
- List<Student> students = this.getStudents();
- for (int i=0; i<students.size(); i++) {
- if (students.get(i).getId()%2 == 0)
- students.remove(i);
- }
- }
- /**
- * 使用Iterator的方式也可以順利刪除和遍歷
- */
- public void iteratorRemove() {
- List<Student> students = this.getStudents();
- System.out.println(students);
- Iterator<Student> stuIter = students.iterator();
- while (stuIter.hasNext()) {
- Student student = stuIter.next();
- if (student.getId() % 2 == 0)
- stuIter.remove();
- }
- System.out.println(students);
- }
- private List<Student> getStudents() {
- List<Student> students = new ArrayList<Student>() {
- {
- int i = 0;
- while (i++ < 10) {
- Student student = new Student(i, "201200" + i, "name_" + i);
- this.add(student);
- }
- }
- };
- return students;
- }
- }
- public class Student {
- private int id;
- private String stuNo;
- private String name;
- public Student() {
- }
- public Student(int id, String stuNo, String name) {
- this.id = id;
- this.stuNo = stuNo;
- this.name = name;
- }
- public int getId() {
- return id;
- }
- public void setId(int id) {
- this.id = id;
- }
- public String getStuNo() {
- return stuNo;
- }
- public void setStuNo(String stuNo) {
- this.stuNo = stuNo;
- }
- public String getName() {
- return name;
- }
- public void setName(String name) {
- this.name = name;
- }
- @Override
- public String toString() {
- return "Student [id=" + id + ", name=" + name + ", stuNo=" + stuNo
- + "]";
- }
- }
相關推薦
如何正確遍歷刪除List中的元素,你會嗎?
遍歷刪除List中的元素有很多種方法,當運用不當的時候就會產生問題。下面主要看看以下幾種遍歷刪除List中元素的形式:1.通過增強的for迴圈刪除符合條件的多個元素2.通過增強的for迴圈刪除符合條件的一個元素3.通過普通的for刪除刪除符合條件的多個元素4.通過Iterator進行遍歷刪除符合條件的多個元素
如何正確遍歷刪除List中的元素(普通for迴圈、增強for迴圈、迭代器iterator、removeIf+方法引用)
遍歷刪除List中符合條件的元素主要有以下幾種方法: 普通for迴圈 增強for迴圈 foreach 迭代器iterator removeIf 和 方法引用 (一行程式碼搞定) 其中使用普通for迴圈容易造成遺漏元素的問題,增強for迴圈foreach會報java.util.Concurre
java中迴圈遍歷刪除List和Set集合中元素的方
1.異常java一邊遍歷一邊刪除集合中的元素會報異常ConcurrentModificationException 2.正確的做法如下: package list; import java.util.*; public class Demo { public
C#如何遍歷刪除List集合中的資料
在搜尋該問題之前我想你一定已經用過foreach遍歷並Remove的操作,突然發現報出了 集合已修改;可能無法執行列舉操作的異常。 我這裡給大家提供四種方式遍歷刪除資料: 第一種是模仿阿里巴巴Java開發手冊1.4的刪除: 新貼出手冊中的內容: 發現C#裡並沒有
JAVA中循環刪除list中元素的方法總結
tor 循環 toolbar i++ 使用 修改 log span .get 印象中循環刪除list中的元素使用for循環的方式是有問題的,但是可以使用增強的for循環,然後今天在使用時發現報錯了,然後去科普了一下,再然後發現這是一個誤區。下面就來講一講。。伸手黨可直接跳
Java循環中刪除list中元素方法的總結
bar del mov als lis remove for for循環 技術 JAVA中循環遍歷list有三種方式for循環、增強for循環(也就是常說的foreach循環)、iterator遍歷。 1、for循環遍歷list for(int i=0;i<li
AVA中循環刪除list中元素
叠代 修改 註意 bre iterator 多個 lis div 如果 文章來源: https://www.cnblogs.com/pcheng/p/5336903.html JAVA中循環遍歷list有三種方式for循環、增強for循環(也就是常說的forea
JAVA中循環刪除list中元素的方法總結(跳格刪除問題解決)(轉)
今天 src log 觸發 導致 spi als exceptio spa 印象中循環刪除list中的元素使用for循環的方式是有問題的,但是可以使用增強的for循環,然後今天在使用時發現報錯了,然後去科普了一下,再然後發現這是一個誤區。下面就來講一講。。伸手黨可直接跳至
Java中迴圈刪除List中元素
Java中迴圈刪除List中元素 寫在開頭:最近在處理一個包裝類時候,把Mapper查詢到的資料暫存到了ArrayList中,後續做迴圈遍歷刪除操作的時候,當時採用了foreach迴圈,結果彈出了ConcurrentModificationException錯誤。於是乎就在部落格上找
JAVA將ResultSet遍歷到List中
今天在使用jstl標籤展示查詢結果時遇到一個小問題,即如何將ResultSet物件傳遞給前臺頁面。 在預設情況中我們在使用資料庫查詢時 Class.forName(dom.getDriver()); //載入MYSQL JDBC驅動程式 String url=dom.g
java中使用Pattern類中和Matcher類進行查詢和替換,你會嗎?
前言 無論是哪一門語言,我們總會用到正則表示式來進行字串的查詢和替換。Java中也不為過,我曾經寫過一個網頁---正則表示式線上測試。那時候,我還沒有開始學習Java,不知道Java支援正則表示式,所以我的第一個方案是想辦法將資料傳輸到後臺,然後利用Shell指令碼正則表示
服務營銷在企業競爭中作用,你知道嗎?有什麽辦法解決?
自動 思維 溝通 定時 桌面 需要 品牌 營銷管理 客服系統 “服務”是任何企業競爭客戶的重中之重,企業的競爭,說白了就是“服務”的競爭。 據了解,在影樓行業,一個新客戶的獲取成本是維護一個老客戶的5倍,企業的服務營銷就如同是一把“雙刃劍”,舞的好不好,關鍵在舞“劍”人有沒
刪除單鏈表,你會嗎?
刪除單鏈表中值等於XXX的所有元素 不經意間看到了一個不同尋常的實現方法,覺得挺有意思,於是自己實現了一下,程式碼真的是簡單明瞭跑得還賊快! 好,現在先在腦海中想想,你會怎麼實現?這麼簡單,5秒鐘後,你想到了解決方案,於是你決定驗證你的思路,請繼續往下看 定義連結串列節點結構如下:
ES6的這些操作技巧,你會嗎?
ES6出來已經有好幾年了,同時很多新特性可以被巧妙地運用在專案中。本文就講述ES6的這些操作技巧,你會嗎? 1. 強制要求引數 ES6提供了預設引數值機制,允許你為引數設定預設值,防止在函式被呼叫時沒有傳入這些引數。 在下面的例子中,我們寫了一個required()函式作為引
一套實用的滲透測試崗位面試題,你會嗎?
轉自:http://www.test404.com/post-1419.html 1.拿到一個待檢測的站,你覺得應該先做什麼? 收集資訊whois、網站源IP、旁站、C段網站、伺服器系統版本、容器版本、程式版本、資料庫型別、二級域名、防火牆、維護者資訊另說...
Python|一道神奇的Python面試題,你會嗎?
小編無意間,看到這麼一道Python面試題:以下程式碼將輸出什麼? 更多Python視訊、原始碼、資料加群960410445免費獲取 腦中默默一想,這還用說麼,肯定是: 最後一看答案,竟然是:
一道神奇的Python面試題,你會嗎?
開發十年,就只剩下這套架構體系了! >>>
我發現很多人其實不會用瀏覽器,你會嗎?
不一定 .so 資料 for nic www ima .com 效率 大多數人的生活和工作離不開電腦,而用電腦基本上是離不開瀏覽器的。 1、你知道的別人不一定知道,反之亦然 用瀏覽器看新聞、查資料很簡單,但是很多人都不知道瀏覽器的另一個強大的功能。也就是今天我想給大家介
python 刪除正在for循環遍歷的list正確做法
body dex 之前 遍歷 mov pri div clas 結果 先放一個python遍歷發生的異常: 1 ls =[1,2,3,4,5,6,7,8,9] 2 for i in ls: 3 print("i",i) 4 print("ls",ls) 5
[轉載]Java HashMap 如何正確遍歷並刪除元素
轉載自 https://www.cnblogs.com/zhangnf/p/HashMap.html?utm_source=itdadao&utm_medium=referral Java HashMap 如何正確遍歷並刪除元素 (一)HashMap的遍歷