`
u013189769
  • 浏览: 1184 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

List 循环删除方法

阅读更多

 

 如果要循环删除List中的某些元素,例如删除值都是‘a’的元素,如果使用普通的for循环,很容易就会会漏删或者报错。

package com.pdnev;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;

import org.junit.Before;
import org.junit.Test;


public class RemoveList {
	List<String> list;
	
	//准备数据
	@Before
	public void setData(){
		list = new ArrayList<String>();
		list.add("a");list.add("b");list.add("c");list.add("a");list.add("b");list.add("b");list.add("d");list.add("c");list.add("c");list.add("d");list.add("c");
	}
	
	//测试正确的方法
	@Test
	public void removeElement(){
		System.out.println("原始数据: "+ Arrays.asList(list));
		
		//从后向前删除
		for(int i = list.size()-1;i>=0;i--){
			if(list.get(i).equals("a"))	list.remove(i);
		}
		System.out.println("删除a后: "+ Arrays.asList(list));
		
		//Iterator 删除
		Iterator<String> it = list.iterator();
		while(it.hasNext()){
			String s = it.next();
			if(s.equals("b")) it.remove(); //不可以使用list.remove
			
		}
		System.out.println("删除b后: "+ Arrays.asList(list));
		
		//会漏掉的删除
		for(int i = 0;i<list.size();i++){
			if(list.get(i).equals("c"))  list.remove(i);
		}
		System.out.println("删除c后: "+ Arrays.asList(list));
		
		int size = list.size();
		for(int i = 0;i<size;i++){
			if(list.get(i).equals("d"))  list.remove(i);
		}
	}
}

 

执行结果:



可以看到,第一种使用从后向前删除是没有问题的。第二种使用Iterator 删除也是没问题的。

但是删除c 这一行的输出就有问题,仍然有c。 这是使用普通的for循环删除,会漏删,另外,如果size不是每次都去获取,会报越界异常。

 

如果使用 增强for的时候。会报ConcurrentModificationException异常

 

(因为对junit不熟悉,所以代码使用了junit练习下)

 

 

 

 

  • 大小: 2.9 KB
  • 大小: 6.5 KB
分享到:
评论

相关推荐

    C#遍历List并删除某个元素的方法

    主要介绍了C#遍历List并删除某个元素的方法,实例分析了正序与倒序遍历list及删除元素的使用技巧,需要的朋友可以参考下

    Python中list循环遍历删除数据的正确方法

    前言 初学Python,遇到过这样的问题,在遍历list的时候,删除符合条件的数据,可是总是报异常,代码如下: ...原因是在删除list中的元素后,list的实际长度变小了,但是循环次数没有减少,依然按照

    删除List中的重复值

    方法一:循环元素删除 // 删除ArrayList中重复元素 public static void removeDuplicate(List list) { for ( int i = 0 ; i &lt; list.size() - 1 ; i ++ ) { for ( int j = list.size() - 1 ; j &gt; i; j -- ) {...

    java中循环删除list中元素的方法总结

    下面小编就为大家带来一篇java中循环删除list中元素的方法总结。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    基于list循环删除元素,迭代器失效的问题详解

    下面小编就为大家带来一篇基于list循环删除元素,迭代器失效的问题详解。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    Python list列表中删除多个重复元素操作示例

    本文实例讲述了Python list列表中删除多个重复元素操作。分享给大家供大家参考,具体如下: 我们以下面这个list为例,删除其中所有值为6的元素: l=[9,6,5,6,6,7,8,9,6,0] 首先尝试remove方法: l.remove(6) ...

    对python list 遍历删除的正确方法详解

    在遍历list的时候,删除符合条件的数据,可是总是报异常,代码如下: num_list = [1, 2, 3, 4, 5] print(num_list) for i in range(len(num_list)): ...解决方案:倒序循环删除 num_list = [1, 2, 3, 4,

    带头结点的双向循环链表数据结构

    用C++和Java实现带头节点的双向循环链表,要继承linearList类,并实现它的所有功能,另外,必须实现双向迭代器。 实现带头节点的双向循环链表,要具有以下的功能: 判断表是否为空,如果为空则返回true,不空返回...

    java中循环遍历删除List和Set集合中元素的方法(推荐)

    下面小编就为大家带来一篇java中循环遍历删除List和Set集合中元素的方法(推荐)。小编觉得挺不错的,在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    C#在foreach遍历删除集合中元素的三种实现方法

    方法一:采用for循环,并且从尾到头遍历 如果从头到尾正序遍历删除的话,有些符合删除条件的元素会成为漏网之鱼; 正序删除举例: List&lt;string&gt; tempList = new List() { "a","b","b","c" }; for (int i = 0; ...

    Python实现列表删除重复元素的三种常用方法分析

    本文实例讲述了Python实现列表删除重复元素的三种常用方法。分享给大家供大家参考,具体如下: 给定一个列表,要求删除列表中重复元素。 listA = ['python','语','言','是','一','门','动','态','语','言'] 方法1...

    HashMap和List遍历方法及如何遍历删除元素总结

    在本篇文章中小编给大家分享了关于HashMap和List遍历方法及如何遍历删除元素知识点总结,需要的朋友们参考下。

    C++ STL list 遍历删除出错解决方案

    C++ STL list 遍历删除崩溃 错误用法一 下面这种用法会在for的地方崩溃,分析 第一次for循环的时候 it=0,当t.erase(it)执行完成之后 it就变成了 -17891602 表明it不能再作为迭代器进行运算,自然会报错。 #...

    Python如何在循环内使用list.remove()

    主要介绍了Python如何在循环内使用list.remove(),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

    循环双链表 CDList.h

    在Linux内核源码list.h基础上,修改成应用层使用的头文件 实现了循环双链表的的各功能函数和宏定义,包括但不限于链表的创建、插入、删除、遍历。

    listlist.c

    双向循环链表的创建,添加,删除及输出的C代码

    python list删除元素时要注意的坑点分享

    在上述for循环中,假设我们删除了index=2的值,原本index=3及之后的值会向前补位,所以在循环中就跳过了原index=3的变量 同理,使用list.pop()函数删除指定元素的时候,也会出现上述情况,如: In[33]: a = [1,2,3,...

Global site tag (gtag.js) - Google Analytics