Vector集合 中 remove方法

如果是在for循环中调用remove方法,则会报数组越界错误,可以将for循环改为迭代器使用


Java的List在删除元素时,一般会用list.remove(o)/remove(i)方法 

package com.kgc.demo;

import java.lang.reflect.Field;
import java.util.Vector;

public class TestMyFrame {
	public static  void main(String[] args) {

		Vector<Integer> list=new Vector<>();
		list.add(1);
		list.add(2);
		list.add(3);
		list.add(4);
		list.add(5);
		System.out.println(list);
		System.out.println("================");

		//输出结果为[1, 2, 3, 4, 5]
		
		
		
		
		System.out.println(list.toString());
		System.out.println("================");
		System.out.println(list.iterator());		
		System.out.println("================");
		System.out.println(list.size());
		//每次移除最后一个 获取对象
		System.out.println(list.remove(list.size()-1));
		System.out.println(list.remove(list.size()-1));
		System.out.println(list.remove(list.size()-1));
		System.out.println("================");
		System.out.println(list);		
		System.out.println("================");
		System.out.println(list.toString());
		System.out.println("================");
		System.out.println(list.iterator());
		
		
		
		
		//每次移除第一个 获取对象
		System.out.println("================");
		System.out.println(list.size());
		System.out.println(list.remove(0));
		System.out.println(list.remove(0));
		System.out.println("================");
		System.out.println(list);
		
		
	}       

}           
           

结果如下

 [1, 2, 3, 4, 5]
================
[1, 2, 3, 4, 5]
================
java.util.Vector$Itr@659e0bfd
================
5
5
4
3
================
[1, 2]
[1, 2]
================
[1, 2]
================
java.util.Vector$Itr@2a139a55
================
2
1
2
================
[]

 

  1. 通过代码我们发现 Itr 是 ArrayList 中定义的一个私有内部类,

  2. 在 next、remove方法中都会调用checkForComodification 方法,该方法

  3. 的作用是判断 modCount != expectedModCount是否相等,如果不相等则抛

  4. 出ConcurrentModificationException异常。每次正常执行remove 方法后,

  5. 都会对执行expectedModCount = modCount赋值,保证两个值相等,那么问题

  6. 基本上已经清晰了,在 foreach 循环中执行 list.remove(item);,

  7. 对 list 对象的 modCount 值进行了修改,

  8. 而 list 对象的迭代器的 expectedModCount 值未进行修改,

  9. 因此抛出了ConcurrentModificationException异常。

  1. 总结:

  2.    1、用for循环遍历List删除元素时,需要注意索引会左移的问题。

  3.    2、List删除元素时,为避免陷阱,建议使用迭代器iterator的remove方式。

  4.    3、List删除元素时,默认按索引删除,而不是对象删除。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

kjshuan

点个赞就好啦!!!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值