java 集合遍历时删除元素

本文探讨集合在遍历时删除其中元素的一些注意事项,代码如下

?





1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

import java.util.ArrayList;

import java.util.Iterator;

import java.util.List;

public class TestExtFor {

    /**

     * @param args

     */

    

    

    public
static void main(String[] args) {

        // TODO Auto-generated method stub

        List<String> list = new
ArrayList<String>();

        list.add("java");

        list.add("python");

        list.add("ruby");

        

        delete(list);

        //delete1(list);

        //delete2(list);

        //delete3(list);

    }

    private
static void delete3(List<String> list) {

        for(int
i=0;i<list.size();i++){

            String language = list.get(i);

            list.remove(language);

        }

    }

    private
static void delete2(List<String> list) {

        for(String str:list){

            list.remove(str);

        }

    }

    private
static void delete(List<String> list) {

        Iterator<String> itr = list.iterator();

        while(itr.hasNext()){

            String language = itr.next();

            list.remove(language);

        }

    }

    

    private
static void delete1(List<String> list) {

        Iterator<String> itr = list.iterator();

        while(itr.hasNext()){

            String language = itr.next();

            itr.remove();

        }

    }

}

  当使用方法delete时,会报一个java.util.ConcurrentModificationException异常,这种情况应使用Iterator的remove方法,即方法delete1。

同样方法delete2中使用增强的for循环(for-each)时也会报此异常,原因就是for-each循环内部使用了Iterator来遍历Collection,它也调用了Iterator.next()。这种情况可以使用普通的for循环来解决,即方法delete3。

java 集合遍历时删除元素,布布扣,bubuko.com

时间: 2024-08-05 06:47:09

java 集合遍历时删除元素的相关文章

Java集合遍历时删除

public static void main(String[] args){ List<Integer> list = new ArrayList<Integer>(); list.add(1); list.add(2); list.add(3); list.add(4); list.add(5); Iterator<Integer> interator = list.iterator(); while(interator.hasNext()){ Integer i

STL容器遍历时删除元素

STL容器遍历时在循环体内删除元素最容易出错了,根本原因都是因为迭代器有效性问题,在此记下通用删除方法,该方法适用于所有容器: 1 std::vector<int> myvec; 2 3 std::vector<int>::iterator it = myvec.begin(); 4 while( it != myvec.end()) 5 { 6 it = myvec.erase(it); 7 } 容器list有个比较另类的删除方法,如下代码所示: std::list<int

python list遍历时删除元素

python list遍历时候删除还真需要注意下,今天帮同学处理数据,竟然傻逼了. 需求: 除了第一列,给每列加一个序号如:"1:0","2:0","3:20100307",然后删除冒号后为0的数据. 推荐做法: arrays = [ ['5001', '0', '0', '20100307', '20150109', '2', '3', '75', '0', '0', '114', '13', '2', '0', '0'], ['10001',

list遍历时删除元素

正如我们前面所知道. 在我们依靠遍历删除ArrayList时总是出现一些神奇的现象.比如 ArrayList<integer> arraylist = new ArrayList<integer>(); arraylist.add(1); arraylist.add(1); arraylist.add(2); arraylist.add(3); arraylist.add(1); 我们遍历并删除其中的1 for(int i = 0:i < arraylist.size();i

List集合遍历时修改元素出现并发修改异常总结

什么是并发修改异常: 当我们在遍历实现了collection接口与iterator接口的集合时(List.Set.Map), 我们可以通过遍历索引也可以通过迭代器进行遍历.在我们使用迭代器进行遍历集合的时候,会获取到当前集合的迭代对象.在里面有封装了迭代器的remove方法与集合自带的remove方法,如果我们调用迭代器对象的remove方法是没问题的,但是当我们调用集合自带的remove方法时,就会产生ConcurrentModificationException 并发修改异常.也就是说,当我

多线程14-遍历集合时删除元素问题分析

1. 问题 创建一个User类: package cn.itcast.heima2; public class User implements Cloneable{ private String name; private int age; public User(String name, int age) { this.name = name; this.age = age; } public boolean equals(Object obj) { if(this == obj) { ret

Java HashMap 如何正确遍历并删除元素

(一)HashMap的遍历 HashMap的遍历主要有两种方式: 第一种采用的是foreach模式,适用于不需要修改HashMap内元素的遍历,只需要获取元素的键/值的情况. HashMap<K, V> myHashMap; for (Map.entry<K, V> item : myHashMap.entrySet()){ K key = item.getKey(); V val = item.getValue(); //todo with key and val //WARNI

java集合遍历删除指定元素异常分析总结

在使用集合的过程中,我们经常会有遍历集合元素,删除指定的元素的需求,而对于这种需求我们往往使用会犯些小错误,导致程序抛异常或者与预期结果不对,本人很早之前就遇到过这个坑,当时没注意总结,结果前段时间又遇到了这个问题,因此,总结下遍历集合的同时如何删除集合中指定的元素: 1.错误场景复原 public class ListRemoveTest { public static void main(String[] args) { List<User> users = new ArrayList&l

Java 遍历Map时 删除元素

1 package net.nie.test; 2 3 import java.util.HashMap; 4 import java.util.Iterator; 5 import java.util.Map; 6 7 public class HashMapTest { 8 private static Map<Integer, String> map=new HashMap<Integer,String>(); 9 10 /** 1.HashMap 类映射不保证顺序:某些映射