删除Set集合元素时抛出ConcurrentModificationException异常?

遍历Set集合的几种方法:
  1. 用foreach遍历
  2. 用Iterator迭代器遍历
  3. 用toArray方法转成数组再遍历(不推荐)
删除Set集合中某一个元素:

错误的操作示范:

public static void main(String[] args) {
	Set<String> set= new Set<>();
	set.add("Java");
	set.add("C++");
	set.add("Python");
	// 1. 	错误示范①——在foreach循环里删除元素
	for (String str : set){
        if(str.equals("Java")){
           set.remove(str);
        }
    }
    // 2. 	错误示范②——用Itearator迭代器遍历时用Set自带remove方法删除元素
    Iterator<String> iterator = set.iterator();
    while(iterator.hasNext()){
         if(iterator.next().equals("Java")){
           set.remove(str);
        }
    }
}

上面的两种操作方式在Set集合中的元素大于1个时,会抛出ConcurrentModificationException(并发修改异常)
正确的操作示范:

public static void main(String[] args) {
	Set<String> set= new Set<>();
	set.add("Java");
	set.add("C++");
	set.add("Python");
    // 正确示范——用Itearator迭代器本身的remove方法删除元素
    Iterator<String> iterator = set.iterator();
    while(iterator.hasNext()){
         if(iterator.next().equals("Java")){
         	iterator.remove();
        }
    }
}
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值