王尘宇王尘宇

研究百度干SEO做推广变成一个被互联网搞的人

arraylist删除元素的方法(arraylist集合删除对象)

arraylist删除元素的方法(arraylist集合删除对象)

平时最常用的莫过于ArrayList和HashMap了,面试的时候也是问答的常客。先不去管容量、负载因子什么的,就是简单的使用也会遇到坑。尤其是使用Remove.

经常遇到的一个场景是:遍历list, 然后找到合适条件的给删除掉,比如删除所有的偶数。

@Test
	public void testRemove2(){
	 List<Integer> integers = new ArrayList<>(5);
	 integers.add(1);
	 integers.add(2);
	 integers.add(2);
	 integers.add(4);
	 integers.add(5);
	 for (int i = 0; i < integers.size(); i++) {
	 if (integers.get(i)%2==0){
	 integers.remove(i);
	 }
	 }
	 System.out.println(integers);
	}

看起来好像没问题,加入面试的时候当面问:输出结果是什么?再问真不会报错吗?再问结果是什么?

结果是:

  • 报错
  • 结果是空list
  • 结果是[1, 2, 5]

如果使用foreach是否可以实现刚开始的问题:

@Test
	public void testRemove4(){
		List<Integer> integers = new ArrayList<>(5);
	 integers.add(1);
	 integers.add(2);
	 integers.add(2);
	 integers.add(4);
	 integers.add(5);
	 for (Integer string : integers) {
	 	integers.remove(string);
	 }
	}

结果报错:
java.lang.UnsupportedOperationException

正确的remove做法是:

方法一:

@Test
	public void testRemove9(){
		List<Integer> integers = new ArrayList<>(5);
	 integers.add(1);
	 integers.add(2);
	 integers.add(2);
	 integers.add(4);
	 integers.add(5);
	 Iterator<Integer> iterator = integers.iterator();
	 while (iterator.hasNext()){
	 	Integer next = iterator.next();
	 	if (next%2 == 0){
	 		iterator.remove();
	 	}
	 }
	 System.out.println(integers);
	}

方法二:

@Test
	public void testRemove7(){
		List<Integer> integers = new ArrayList<>(5);
	 integers.add(1);
	 integers.add(2);
	 integers.add(2);
	 integers.add(4);
	 integers.add(5);
	 
	 for(int i= integers.size()-1;i>=0;i--)
	 {
	 	 if (integers.get(i)%2==0){
		 integers.remove(i);
		 }
	 }
	 System.out.println(integers);
	}

 

相关文章

评论列表

发表评论:
验证码

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。