亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

java集合類arraylist循環(huán)中刪除特定元素的方法

 更新時(shí)間:2016年11月11日 09:48:06   投稿:jingxian  
下面小編就為大家?guī)?lái)一篇Java集合類ArrayList循環(huán)中刪除特定元素的方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧

在項(xiàng)目開(kāi)發(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ì)拋異???/p>

可以對(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接口,提供開(kāi)發(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)文章

最新評(píng)論