JAVA中循環刪除list中元素的方法總結

  印象中循環刪除list中的元素使用for循環的方式是有問題的,但是可以使用增強的for循環,然后今天在使用時發現報錯了,然后去科普了一下,再然后發現這是一個誤區。下面就來講一講。。伸手黨可直接跳至文末。看總結。。

  JAVA中循環遍歷list有三種方式for循環、增強for循環(也就是常說的foreach循環)、iterator遍歷。

?

1、for循環遍歷list

for(int i=0;i<list.size();i++){if(list.get(i).equals("del"))list.remove(i);
}

?  這種方式的問題在于,刪除某個元素后,list的大小發生了變化,而你的索引也在變化,所以會導致你在遍歷的時候漏掉某些元素。比如當你刪除第1個元素后,繼續根據索引訪問第2個元素時,因為刪除的關系后面的元素都往前移動了一位,所以實際訪問的是第3個元素。因此,這種方式可以用在刪除特定的一個元素時使用,但不適合循環刪除多個元素時使用。

?

2、增強for循環

for(String x:list){if(x.equals("del"))list.remove(x);
}

?  這種方式的問題在于,刪除元素后繼續循環會報錯誤信息ConcurrentModificationException,因為元素在使用的時候發生了并發的修改,導致異常拋出。但是刪除完畢馬上使用break跳出,則不會觸發報錯。

?

3、iterator遍歷

復制代碼
Iterator<String> it = list.iterator();
while(it.hasNext()){String x = it.next();if(x.equals("del")){it.remove();}
}
復制代碼

  這種方式可以正常的循環及刪除。但要注意的是,使用iterator的remove方法,如果用list的remove方法同樣會報上面提到的ConcurrentModificationException錯誤。

?

  總結:

  (1)循環刪除list中特定一個元素的,可以使用三種方式中的任意一種,但在使用中要注意上面分析的各個問題。

  (2)循環刪除list中多個元素的,應該使用迭代器iterator方式。

?

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

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

相關文章

直流有刷電機與無刷電機的區別

首先介紹有刷電機與無刷電機工作原理&#xff0c;最后從調速方式及性能差異這兩個方面詳細的闡述了有刷電機與無刷電機的區別。 有刷電機與無刷電機工作原理 1、有刷電機 電機工作時&#xff0c;線圈和換向器旋轉&#xff0c;磁鋼和碳刷不轉&#xff0c;線圈電流方向的交替變化…

MapReduce詳解

MapReduce簡介 MapReduce是一種編程模型&#xff0c;用于大規模數據集&#xff08;大于1TB&#xff09;的并行運算。概念"Map&#xff08;映射&#xff09;"和"Reduce&#xff08;歸約&#xff09;"&#xff0c;是它們的主要思想。 MapReduce極大地方便了編…

JavaScriptBreak 語句 continue 語句

break 語句用于跳出循環。 continue 用于跳過循環中的一個迭代。 Break 語句 我們已經在本教程之前的章節中見到過 break 語句。它用于跳出 switch() 語句。 break 語句可用于跳出循環。 continue 語句跳出循環后&#xff0c;會繼續執行該循環之后的代碼&#xff08;如果有的話…

kernel mtd 分區與UBOOT 分區的理解

今天做內核移植&#xff0c;準備添加NAND flash的驅動&#xff0c;做到MTD分區時&#xff0c;想起在一本書上看到的一句話&#xff0c;說的是分區時每個區之間沒有間隙&#xff0c;前一個區的結束地址是后一個區的起始地址。可是當我看我的開發板的教程時&#xff0c;分區如下&…

運放的主要參數詳細介紹

1. 引言 運放的作用是調節和放大模擬信號&#xff0c;它是用途十分廣泛的器件&#xff0c;接入適當的反饋網絡&#xff0c;可用作精密的交流和直流放大器、有源濾波器濾波器、振蕩器振蕩器及電壓比較器。其應用領域包括但不限制通訊、電子、汽車、工業檢測等等&#xff0c;并將…

FastDFS 文件上傳工具類

FastDFS文件上傳工具類 import org.csource.common.NameValuePair;import org.csource.fastdfs.ClientGlobal;import org.csource.fastdfs.StorageClient1;import org.csource.fastdfs.StorageServer;import org.csource.fastdfs.TrackerClient;import org.csource.fastdfs.Tra…

MOS管的主要參數與重要特性

雙極性晶體管&#xff1a;NPN和PNP管&#xff1b; 單極性晶體管&#xff1a;場效應管&#xff08;MOSFET和JFET&#xff09;&#xff1b; MOS管相對三極管具有速度快、輸入阻抗高、噪聲低、動態范圍大、功耗小、容易集成等優點。 下面總結下其主要參數與重要特性&#xff0c…

【Codeforces Round #430 (Div. 2) B】Gleb And Pizza

【鏈接】點擊打開鏈接 【題意】 在這里寫題意【題解】 根據圓心到原點的距離這個東西判斷一下圓在不在那個環里面就好【錯的次數】 0【反思】 在這了寫反思【代碼】 #include <cstdio> #include <iostream> #include <algorithm> #include <cstring> #…

垂直居中方法總結

<style>#box{position: absolute;margin: auto;top:0px;right: 0px;bottom: 0px;left: 0px;width: 100%;height: 30%;background-color: red;text-align: center;} </style> <body><div id"box"><h1>文字居中</h1></div> …

NAND 壞塊管理

NAND的操作管理方式 NAND FLASH的管理方式&#xff1a;以三星FLASH為例&#xff0c;一片Nand flash為一個設備(device)&#xff0c;1 (Device) xxxx (Blocks)&#xff0c;1 (Block) xxxx (Pages)&#xff0c;1(Page) 528 (Bytes) 數據塊大小(512Bytes) OOB 塊大小(16Bytes&…

js備忘錄模式——實現分頁點擊已經請求過上一頁的數據(讀js設計模式)

例子&#xff1a;新聞數據實現分頁||點擊下一頁后又點擊上一頁后不用再次請求數據&#xff0c;避免資源浪費&#xff0c;網速不好&#xff0c;用戶體驗效果差 備忘錄模式&#xff1a;在不破壞對象的封裝性的前提下&#xff0c;在對象之外捕獲并保存該對象內部的狀態以方便日后對…

運放的典型電路舉例與計算仿真

運放電路的計算&#xff0c;通過記各種公式很難記住&#xff0c;但是掌握其兩個重要概念&#xff0c;所有計算均可迎刃而解。 那就是運放的兩個重要特性&#xff1a; 虛斷&#xff1a;運放本質特性&#xff0c;輸入阻抗大&#xff0c;兩個輸入端視為等效開路&#xff1b; 虛…

【SPOJ 694】Distinct Substrings (更直接的求法)

【鏈接】h在這里寫鏈接 【題意】 接上一篇文章【題解】 一個字符串所有不同的子串的個數∑(len-sa[i]-height[i])【錯的次數】 0【反思】 在這了寫反思【代碼】 #include<bits/stdc.h> using namespace std;const int N 2e3; const int MAX_CHAR 300;//每個數字的最大…

HTML-錨點

<!DOCTYPE html> <html> <head lang"en"> <meta charset"UTF-8"> <title>錨點</title> <style> .box1,.box2{ height: 600px; border:1px solid; } </style> </head> <body> <a h…

/dev/mtdN和/dev/mtdblockN的區別

1、/dev/mtdn是linux中的MTD架構中&#xff0c;系統自己實現的mtd分區所對應的字符設備&#xff0c;其里面添加了一些ioctl&#xff0c;支持很多命令&#xff0c;如MEMGETINFO&#xff0c;MEMERASE等。 而mtd-util中的flash_eraseall等工具&#xff0c;就是以這些ioctl為基礎而…

#define GPBCON (*(volatile unsigned *)0x56000010) 的理解

2019獨角獸企業重金招聘Python工程師標準>>> 對于不同的計算機體系結構&#xff0c;設備可能是端口映射&#xff0c;也可能是內存映射的。如果系統結構支持獨立的IO地址空間&#xff0c;并且是端口映射&#xff0c;就必須使用匯編語言完成實際對設備的控制&#xff…

三極管基本參數介紹與放大電路分析

全稱為半導體三極管&#xff0c;也稱雙極型晶體管、晶體三極管&#xff0c;是一種電流控制電流的半導器件&#xff0c;作用是把微弱信號放大成幅度值較大的電信號&#xff0c; 也用作無觸點開關。 兩個PN結的排列方式有兩種&#xff1a;PNP和NPN。 三個端點依序稱為射極&#…

Nand分區及nand erase簡解

我的nand flash 32M&#xff0c;kernel 2.6.18, rootfs is emb linux, cramfs.nand flash分區如下&#xff1a;static struct mtd_partition nand_partitions[] {/* bootloader (UBL, U-Boot, BBT) in sectors: 0 - 14 */{.name "bootloader",.offset 0,.size 32…

eclipse啟動了tomcat,但是瀏覽器打不開歡迎頁

tomcat在eclipse中啟動成功&#xff0c;主頁卻打不開 癥狀&#xff1a; tomcat在eclipse里面能正常啟動&#xff0c;而在瀏覽器中訪問http://localhost:8080/不能訪問&#xff0c;且報404錯誤。同時其他項目頁面也不能訪問。 關閉eclipse里面的tomcat&#xff0c;在tomcat安裝目…

洛谷1011 車站

水題。題目描述有坑&#xff0c;可以先根據樣例手算試一試//Serene #include<algorithm> #include<iostream> #include<cstring> #include<cstdlib> #include<cstdio> #include<cmath> using namespace std; const int maxn50; int f[50],…