java.util.List的remove()方法使用技巧(转)

来源:互联网 发布:php写android服务器端 编辑:程序博客网 时间:2024/05/22 00:08

一.list.remove(i)

de  >public static void main(String[] args) {    List<Integer> list = new ArrayList<Integer>();    list.add(1);    list.add(2);    list.add(3);    list.add(3);    list.add(4);             for (int i=0; i<list.size(); i++) {        if (list.get(i) == 3) {            list.remove(i);//这样写不对,需要写成list.remove(i--)         }    }             System.out.println(list);}de>
de style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; border-radius: 3px; padding: 2px; font-size: 13px;" >de>

如果要遍历list进行过滤,比如过滤掉值为3的对象。本以为这代码再简单不过,可还是掉坑里了,上面的代码这样写的话,元素3是过滤不完的。只要list中有相邻2个相同的就过滤不完List调用remove(index)方法后,会移除index位置上的元素,index之后的元素就全部依次左移,即索引依次-1要保证能操作所有的数据,需要把index-1,否则原来索引为index+1的元素就无法遍历到(因为原来索引为index+1的数据,在执行移除操作后,索引变成index了,如果没有index-1的操作,就不会遍历到该元素,而是遍历该元素的下一个元素)。

同样,Map通过keySet()或entrySet()遍历时,不能删除里面的元素,否则会报java.util.ConcurrentModificationException

为了避免出现以上情况,需要对List或Map进行遍历且要进行删除操作时一定要使用迭代器Iterator,通过iterator.remove()来删除。

二.建议使用iterator.remove方法

de  >if (null != list && list.size() > 0) {    Iterator it = list.iterator();      while(it.hasNext()){        Student stu = (Student)it.next();         if (stu.getStudentId() == studentId) {            it.remove(); //移除该对象        }    }}de>
阅读全文
0 0
原创粉丝点击