Java集合类ArrayList循环中删除特定元素

在项目开发中,我们可能往往需要动态的删除ArrayList中的一些元素。本文将讲解Java集合类ArrayList循环中删除特定的元素。

 

在项目开发中,我们可能往往需要动态的删除ArrayList中的一些元素。

一种错误的方式:

[java] view plaincopy

  1. for(int i = 0 , len= list.size();i<len;++i){  
  2.   if(list.get(i)==XXX){  
  3.        list.remove(i);  
  4.   }  
  5. }  

上面这种方式会抛出如下异常:

[java] view plaincopy

  1. Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 3, Size: 3  
  2.     at java.util.ArrayList.RangeCheck(Unknown Source)  
  3.     at java.util.ArrayList.get(Unknown Source)  
  4.     at ListDemo.main(ListDemo.java:20)  

因为你删除了元素,但是未改变迭代的下标,这样当迭代到最后一个的时候就会抛异常咯。

可以对上面的程序进行如下改进:

上面的代码就正确了。

下面我们再介绍一种方案:

List接口内部实现了Iterator接口,提供开发者一个iterator()得到当前list对象的一个iterator对象。

[java] view plaincopy

  1. Iterator<String> sListIterator = list.iterator();  
  2. while(sListIterator.hasNext()){  
  3.     String e = sListIterator.next();  
  4.     if(e.equals("3")){  
  5.     sListIterator.remove();  
  6.     }  
  7. }  

上面这种也是正确的,并推荐使用第二种方案。

两种方案实现原理都差多的,第二种只是jdk封装了下。

查看ArrayList源码会发现很多方法内部都是基于iterator接口实现的,所以推荐使用第二种方案。

出至:http://loonhxl.sinaapp.com/

时间: 2024-07-28 21:10:45

Java集合类ArrayList循环中删除特定元素的相关文章

java集合类arraylist循环中删除特定元素的方法_java

在项目开发中,我们可能往往需要动态的删除ArrayList中的一些元素. 一种错误的方式: <pre name="code" class="java">for(int i = 0 , len= list.size();i<len;++i){ if(list.get(i)==XXX){ list.remove(i); } }  上面这种方式会抛出如下异常:   Exception in thread "main" java.lan

Java ArrayList删除特定元素的方法

ArrayList是最常用的一种java集合,在开发中我们常常需要从ArrayList中删除特定元素.有几种常用的方法: 最朴实的方法,使用下标的方式: ArrayList al = new ArrayList();    al.add("a");    al.add("b");    //al.add("b");    //al.add("c");    //al.add("d");    for (in

数组任意位置插入元素,删除特定元素的实例

如下所示: $ary = array( array('t'=>1,'y'=>2), array('t'=>2,'y'=>9) ); $t = array_splice( $ary, 1,0,array(array('t'=>3,'y'=>10)) ); print_r($ary); 控制台输出: $ary = array( array('t'=>1,'y'=>2), array('t'=>3,'y'=>10), array('t'=>2,'

用java打印出数组中不同的元素,比如int[] a=new[]{2,4,5,6,3}和int[] b=new[]{1,4,8,6,9}哪位大侠能帮我!急!

问题描述 用java打印出数组中不同的元素,比如int[]a=new[]{2,4,5,6,3}和int[]b=new[]{1,4,8,6,9}/*结果输出1,8,9**/ 解决方案 解决方案二:publicclassTest{publicstaticvoidmain(String[]args){intnumA[]={2,4,5,6,3};intnumB[]={1,4,8,6,9};LinkedList<Integer>difNumList=newLinkedList<Integer>

PHP删除数组中的特定元素的代码_php技巧

比如下面的程序: 复制代码 代码如下: <?php $arr = array('apple','banana','cat','dog'); unset($arr[2]); print_r($arr); ?> 程序运行结果: 复制代码 代码如下: Array ( [0] => apple [1] => banana [3] => dog ) 但是这种方法的最大缺点是没有重建数组索引,就是说,数组的第三个元素没了. 经过查资料后,原来PHP提供了这个功能,只不过很间接.这个函数是

在字符串中删除特定的字符

转自:http://zhedahht.blog.163.com/blog/static/25411174200801931426484/ 题目:输入两个字符串,从第一字符串中删除第二个字符串中所有的字符.例如,输入"They are students."和"aeiou",则删除之后的第一个字符串变成"Thy r stdnts.". 分析:这是一道微软面试题.在微软的常见面试题中,与字符串相关的题目占了很大的一部分,因为写程序操作字符串能很好的反映

谷歌扩大欧洲“被遗忘权”实施范围 将从所有搜索页面中删除特定内容

自2014年开始,谷歌已经按照欧盟的裁决,在欧洲范围内执行"被遗忘权". 截至目前为止,该公司只将"被遗忘权"的范围限定在欧洲的Google搜索页面中.据<金融时报>报道,现在谷歌宣布将为欧洲公民扩大"被遗忘权"实施范围, 将范围覆盖至全球所有Google搜索页面. 欧盟的相关法律允许用户从搜索引擎结果页面中删除自己的名字或者相关历史事件,而科技公司需要根据用户要求执行. 然而此前欧洲公民要求谷歌从搜索结果中删除与自己相关的信息,谷歌

Java不中断循环中的单个异常处理

问题描述 如下代码.问题在注释里描述了public static List<ProfileEntity> getProfiles(String dir){File dirFile = new File(dir);if(dirFile.isFile()) dirFile = dirFile.getParentFile();final File[] fList = dirFile.listFiles();List<ProfileEntity> plist = null;if(fList

【java】实体类中 按照特定的字段 进行升序/降序 排序

背景:   实际页面上  所有的分值都是按照JSON格式存储在一个字符串中 存储在同一个字段中: {"ownPTotal":"10>0","ownOTotal":"8>0","ownTotal1":"18","ownTotal2":"80","ownTotal3":"20","ownTo