• 2022-05-28
宇哥博客 后端开发 Java删除List中元素,迭代器remove()方法

Java删除List中元素,迭代器remove()方法

trojan
List list =new ArrayList();
list.add("asdfffff");
list.add("sx");
list.add("kkj");
list.add("r");
		
System.out.println("原list:" + list);
		
Iterator<String> iter = list.iterator();
while (iter.hasNext()) {
 String item = iter.next();
 if (item.equals("sx")) {
    iter.remove();
 }
}
		
System.out.println("删除元素后list:" + list);

运行结果:

原list:[asdfffff, sx, kkj, r]
删除元素后list:[asdfffff, kkj, r]

迭代器remove()方法虽然方便,但仍有需要注意的地方,要用此法删除元素的前提是该 List 的实现类的iterator()方法返回的Iterator实现类支持remove()方法,否则会报 java.lang.UnsupportedOperationException异常,常用的ArrayList的Iterator支持remove()方法,但有些情况下就会有问题,来看看以下代码:

Integer[] arr = {1, 2, 3, 4, 5};
		List<Integer> list = Arrays.asList(arr);
		Iterator<Integer> iter = list.iterator();
		while (iter.hasNext()) {
		    Integer item = iter.next();
		    if (item == 2) {
		        iter.remove();
		    }
		}
		
		System.out.println("删除元素后list:" + list);

这种情况就会运行失败,报 java.lang.UnsupportedOperationException异常。


使用迭代器remove()方法还有需要注意的问题,接着看下面的代码:

List<Integer> list = new ArrayList<>();
list.add(1);
list.add(2);
list.add(3);
Iterator<Integer> iter = list.iterator();
while (iter.hasNext()) {
	iter.remove();
}

这个例子只是为了展示,比较极端,如果想用这种方法删除List所有元素,则会报java.lang.IllegalStateException异常,原因就是没有在删除前调用Iterator的next()方法。

还有一种变体,如下所示:

List<String> list = new ArrayList<>();
list.add("a");
list.add("b");
list.add("c");
Iterator<String> iter = list.iterator();
while (iter.hasNext()) {
	String item = iter.next();
    if (item.equals("a") || item.equals("c")) {
        list.remove(item);
    }
}

注意,上面的代码调用了List的remove()而不是Iterator的remove(),如果只删除一个元素,那么在删除后调用break语句即可,但这里目的是删除多于1个的元素,会报java.util.ConcurrentModificationException异常。

本文来自网络,不代表本站立场,转载请注明出处。http://www.ygbks.com/1133.html

发表评论

您的电子邮箱地址不会被公开。

返回顶部