Iterator和普通for删除List集合元素

Iterator删除集合元素

标签(空格分隔): j2se


Iterator 接口 也是Java集合框架成员,它主要用来遍历(即迭代访问)Collection集合中的元素,Iterator 对象也称为迭代器

  • boolean hasNext(): 如果迭代中的集合元素没有被遍历完,则返回true

  • Object next(): 返回集合中的下一个元素

  • void remove(): 删除集合里上一次next方法返回的元素

Iterator模式是用于遍历集合类的标准访问方法。它可以把访问逻辑从不同类型的集合类中抽象出来,从而避免向客户端暴露集合的内部结构。


public static void forRemove(List<String> list,String target){

        for(int i = 0;i<list.size();i++){
            if(list.get(i).equals(target)){
                list.remove(i);
            }
        }
    }

    public static void IteratorRemove(List<String> list,String target){
        Iterator<String> iterator = list.iterator();

        while(iterator.hasNext()){
            String s  =  iterator.next();
            if(s.equals(target)){
                iterator.remove();
            }
        }
    }

    public static void IteratorRemoveStu(List<Student> list,String str){

        Iterator<Student> iterator = list.iterator();
        while(iterator.hasNext()){
            Student stu  = iterator.next();
            if(stu.getName().equals(str)){
                iterator.remove();
            }
        }
    }

main测试

    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        list.add("a");
        list.add("b");
        list.add("c");
        list.add("d");
        list.add("e");
        list.add("c");

        /*IteratorRemove(list,"c");*/
        /*forRemove(list,"c");*/

        List<Student> listStu = new ArrayList<>();
        listStu.add(new Student("张三", 25));
        listStu.add(new Student("李四", 36));
        listStu.add(new Student("王五", 12));
        listStu.add(new Student("李四", 36));
        listStu.add(new Student("张三", 25));

        /*for(String str:list){
            System.out.println(str);
        }*/
        IteratorRemoveStu(listStu,"张三");

        for(Student stu :listStu){
            System.out.println(stu);
        }
    }

image_1cb7boo85j4514bq1sro1n0217i59.png-13.8kB

forRemove 这种方法,数据量大时,效率特别低

Itreator 必须依附于Collection 对象,Iterator 迭代器采用的是快速失败(fail-fast)机制,一旦迭代过程中检测到该集合已经被修改(通常是程序中的其他线程修改),程序立即引发ConcurrentModificationException异常,而不是显示修改后的结果,这样可以避免共享资源引发的潜在问题

注意:

foreach 循环迭代访问元素集合更加便捷,但是foreach循环中迭代变量也不是集合本身,系统只是将集合依次元素的赋值给迭代变量,并不能在用于删除集合。

猜你喜欢

转载自blog.csdn.net/zx6571269/article/details/79967336
今日推荐