java集合類arraylist循環(huán)中刪除特定元素的方法
在項(xiàng)目開發(fā)中,我們可能往往需要?jiǎng)討B(tài)的刪除ArrayList中的一些元素。
一種錯(cuò)誤的方式:
<pre name="code" class="java">for(int i = 0 , len= list.size();i<len;++i){
if(list.get(i)==XXX){
list.remove(i);
}
}
上面這種方式會(huì)拋出如下異常:
Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 3, Size: 3 at java.util.ArrayList.RangeCheck(Unknown Source) at java.util.ArrayList.get(Unknown Source) at ListDemo.main(ListDemo.java:20)
因?yàn)槟銊h除了元素,但是未改變迭代的下標(biāo),這樣當(dāng)?shù)阶詈笠粋€(gè)的時(shí)候就會(huì)拋異常咯。
可以對(duì)上面的程序進(jìn)行如下改進(jìn):
for(int i = 0 , len= list.size();i<len;++i){
if(list.get(i)==XXX){
list.remove(i);
--len;//減少一個(gè)
}
}
上面的代碼就正確了。
下面我們?cè)俳榻B一種方案:
List接口內(nèi)部實(shí)現(xiàn)了Iterator接口,提供開發(fā)者一個(gè)iterator()得到當(dāng)前l(fā)ist對(duì)象的一個(gè)iterator對(duì)象。
Iterator<String> sListIterator = list.iterator();
while(sListIterator.hasNext()){
String e = sListIterator.next();
if(e.equals("3")){
sListIterator.remove();
}
}
上面這種也是正確的,并推薦使用第二種方案。
兩種方案實(shí)現(xiàn)原理都差多的,第二種只是jdk封裝了下。
查看ArrayList源碼會(huì)發(fā)現(xiàn)很多方法內(nèi)部都是基于iterator接口實(shí)現(xiàn)的,所以推薦使用第二種方案。
以上就是小編為大家?guī)?lái)的java集合類arraylist循環(huán)中刪除特定元素的方法全部?jī)?nèi)容了,希望大家多多支持腳本之家~
相關(guān)文章
Spring?Data?JPA關(guān)系映射@OneToOne實(shí)例解析
這篇文章主要為大家介紹了Spring?Data?JPA關(guān)系映射@OneToOne實(shí)例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-08-08
java中synchronized關(guān)鍵字的3種寫法實(shí)例
synchronized是Java中的關(guān)鍵字,是一種同步鎖,下面這篇文章主要給大家介紹了關(guān)于java中synchronized關(guān)鍵字的3種寫法,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下2021-11-11
IDEA中項(xiàng)目集成git提交代碼的詳細(xì)步驟
這篇文章主要介紹了IDEA中項(xiàng)目集成git提交代碼的詳細(xì)步驟,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-10-10
RestTemplate如何添加請(qǐng)求頭headers和請(qǐng)求體body
這篇文章主要介紹了RestTemplate如何添加請(qǐng)求頭headers和請(qǐng)求體body問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-07-07
java的SimpleDateFormat線程不安全的幾種解決方案
但我們知道SimpleDateFormat是線程不安全的,處理時(shí)要特別小心,要加鎖或者不能定義為static,要在方法內(nèi)new出對(duì)象,再進(jìn)行格式化,本文就介紹了幾種方法,感興趣的可以了解一下2021-08-08
Spring Cloud OpenFeign REST服務(wù)客戶端原理及用法解析
這篇文章主要介紹了Spring Cloud OpenFeign REST服務(wù)客戶端原理及用法解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-10-10
Java Spring MVC 上傳下載文件配置及controller方法詳解
這篇文章主要介紹了Java Spring MVC 上傳下載文件配置及controller方法詳解,本文介紹的非常詳細(xì),具有參考借鑒價(jià)值,需要的朋友可以參考下2016-09-09
探究Android系統(tǒng)中解析JSON數(shù)據(jù)的方式
這篇文章主要介紹了探究Android系統(tǒng)中解析JSON數(shù)據(jù)的方式,文中講到了使用Java代碼實(shí)現(xiàn)的處理JSON的一些主要方法,需要的朋友可以參考下2015-07-07

