List数组元素的删除 不会出现IndexOutOfBoundsException

 

	public static void main(String[] args) {
		List<String> list = new ArrayList<String>() ;
		list.add("A") ;	// 增加元素
		list.add("B") ;	// 增加元素
		list.add("C") ;	// 增加元素
		list.add("D") ;	// 增加元素
		
//		int size = list.size();
//		for(int i=0; i < size; i++){
//			if (i==1){
//				list.remove(1);
//			}else{
//				System.out.println(list.get(i)) ;
//			}
//		}
//		A
//		Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 2, Size: 2
//			at java.util.ArrayList.RangeCheck(ArrayList.java:547)
//			at java.util.ArrayList.get(ArrayList.java:322)
//			at collectionTest.ListRemoveTest.main(ListRemoveTest.java:17)
		
		int i = 0;
		int size = list.size();
		while (true) {
			if (i == size - 1) {
				break;
			}
			String item = list.get(i);
			if (item.equals("B")){
				list.remove(item);
				i--;
			}else{
				System.out.println(item) ;
			}
			i++;
		}
	}

 

2 或者把要删除的元素放到集合中,删除集合中的元素

 

 

	public static void main(String[] args) {
		List<String> list = new ArrayList<String>() ;
		list.add("A") ;	// 增加元素
		list.add("B") ;	// 增加元素
		list.add("C") ;	// 增加元素
		list.add("D") ;	// 增加元素
		
		List<String> beRemove =  new ArrayList<String>() ;
		beRemove.add("A") ;	// 增加元素
		list.removeAll(beRemove);
		Iterator<String> itA = list.iterator();
		while(itA.hasNext()){
			System.out.println(itA.next());
		}
//		B
//		C
//		D

	}
 

 

2的好处,操作简单。

1的好处,当要删除的是根据数组元素条件判断时,节省内存,时间较快

 

 

3 使用Iterator的remove方法,当不能是list的remove方法,否则报错

 

	public static void main(String[] args) {
		List<String> list = new ArrayList<String>() ;
		list.add("A") ;	// 增加元素
		list.add("B") ;	// 增加元素
		list.add("C") ;	// 增加元素
		list.add("D") ;	// 增加元素
		Iterator<String> itA = list.iterator();
		while(itA.hasNext()){
			String next = itA.next();
			if(next.equals("B")){
				itA.remove();
			}else{
				System.out.println(next);
			}
		}
		
//		Iterator<String> itA = list.iterator();
//		while(itA.hasNext()){
//			String next = itA.next();
//			if(next.equals("B")){
//				list.remove(next);
//			}else{
//				System.out.println(next);
//			}
//		}
//		A
//		Exception in thread "main" java.util.ConcurrentModificationException
//			at java.util.AbstractList$Itr.checkForComodification(AbstractList.java:372)
//			at java.util.AbstractList$Itr.next(AbstractList.java:343)
//			at collectionTest.ListRemoveAllTest.main(ListRemoveAllTest.java:28)		
	}
 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值