51工具盒子

依楼听风雨
笑看云卷云舒,淡观潮起潮落

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

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);</code></pre>



 
这种情况就会运行失败,报 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异常。

赞(0)
未经允许不得转载:工具盒子 » Java删除List中元素,迭代器remove()方法