鹿泽鹿泽  2024-05-06 14:49:17 鹿泽笔记 隐藏边栏  0 
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异常。

1、文章版权归作者所有,未经允许请勿转载。
2、本站所有文章,如无特殊说明或标注,均为本站原创发布。任何在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们邮箱:526009505@qq.com进行处理。
3、咨询请联系QQ:526009505