当前位置: 首页 > 编程笔记 >

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

通迪
2023-03-14
本文向大家介绍java集合类arraylist循环中删除特定元素的方法,包括了java集合类arraylist循环中删除特定元素的方法的使用技巧和注意事项,需要的朋友参考一下

在项目开发中,我们可能往往需要动态的删除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.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) 

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

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

for(int i = 0 , len= list.size();i<len;++i){ 
 
 if(list.get(i)==XXX){ 
 
    list.remove(i); 
    --len;//减少一个 
 } 
 
}

上面的代码就正确了。

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

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

Iterator<String> sListIterator = list.iterator(); 
while(sListIterator.hasNext()){ 
  String e = sListIterator.next(); 
  if(e.equals("3")){ 
  sListIterator.remove(); 
  } 
}

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

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

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

以上就是小编为大家带来的java集合类arraylist循环中删除特定元素的方法全部内容了,希望大家多多支持小牛知识库~

 类似资料:
  • 本文向大家介绍java中循环遍历删除List和Set集合中元素的方法(推荐),包括了java中循环遍历删除List和Set集合中元素的方法(推荐)的使用技巧和注意事项,需要的朋友参考一下 今天在做项目时,需要删除List和Set中的某些元素,当时使用边遍历,边删除的方法,却报了以下异常: ConcurrentModificationException 为了以后不忘记,使用烂笔头把它记录如下: 错误

  • 本文向大家介绍2种Java删除ArrayList中的重复元素的方法,包括了2种Java删除ArrayList中的重复元素的方法的使用技巧和注意事项,需要的朋友参考一下 这篇文章将给出两种从ArrayList中删除重复元素的方法,分别是使用HashSet和LinkedHashSet。 ArrayList是Java中最常用的集合类型之一。它允许灵活添加多个null元素,重复的元素,并保持元素的插入顺序

  • 问题内容: AFAIK有两种方法: 遍历集合的副本 使用实际集合的迭代器 例如, 和 是否有任何理由偏爱一种方法(例如,出于可读性的简单原因而偏爱第一种方法)? 问题答案: 让我举几个例子,并提出一些避免方案。 假设我们有以下藏书 收集并删除 第一种技术是收集所有要删除的对象(例如,使用增强的for循环),并在完成迭代后删除所有找到的对象。 假设你要执行的操作是“删除”。 如果要“添加”此方法也可

  • 我当前正在将一个ArrayList转换为一个字符串,以便将其发送到一个DB,这样我就可以在另一端检索它,并稍后将其转换回一个ArrayList。 我的思路是通过执行以下操作将其转换为当前的字符串 是ArrayList,看起来如下所示: 当我查看数据库时,它看起来像这样 如何删除开头的和最后的以便在数据库上看起来像? 在另一端,我可以使用以下方法获得它: (我正在使用SQLite,这是我大学项目的一

  • 另外,我不想要任何jQuery。

  • 我有这个代码: outlets是传递给方法的ArrayList;riverBasin是int(int[]riverBasin)的2D“矩阵”; 从ArrayList outlets中删除“项”会生成错误: 但我并不完全理解。然而,我怀疑我弄坏了迭代器。对的那么我如何删除ArrayList中不需要的元素呢。 提前感谢您的帮助, 里卡多