Iterator删除集合元素

标签: 集合的删除 Iterator
13人阅读 评论(0) 收藏 举报
分类:

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循环中迭代变量也不是集合本身,系统只是将集合依次元素的赋值给迭代变量,并不能在用于删除集合。

查看评论

Java集合中删除元素使用Iterator

千万不要使用foreach循环,foreach循环会抛出java.util.ConcurrentModificationException异常,因为每次获取对象删除时ArrayList源码必须首先调用...
  • qq_16557323
  • qq_16557323
  • 2017-02-10 10:24:53
  • 604

Iterator遍历集合时不可以删除集合中的元素问题

本人菜鸟一枚,博客用于记录编程是遇到的问题,便于以后随时复习。 Iterator是工作在一个独立的线程中,拥有一个mutex锁。Iterator被创建后会建立一个指向原来对象的单链索引表,当原来的对象...
  • Zhao_yanpeng
  • Zhao_yanpeng
  • 2017-08-04 19:59:29
  • 569

利用Iterator删除集合元素

import java.util.ArrayList; import java.util.Iterator; import java.util.List; public class Iterator...
  • gjf281
  • gjf281
  • 2014-04-20 19:59:30
  • 942

Iterator遍历集合特点

Java中使用Iterator来遍历集合元素,Iterator遍历集合元素有以下几个特点:  Iterator遍历集合元素的过程中不允许线程对集合元素进行修改,否则会抛出ConcurrentMo...
  • qq_20916555
  • qq_20916555
  • 2016-05-01 22:43:35
  • 1978

集合部分:ArrayList集合添加元素,并遍历元素

/** 集合的添加元素和遍历 */ import java.util.*; class ArrayListTest  { public static void main(Strin...
  • Kern_
  • Kern_
  • 2014-09-19 14:52:24
  • 858

使用ArrayList集合,对其添加10个不同的元素,并使用Iterator遍历该集合

15、使用ArrayList集合,对其添加10个不同的元素,并使用Iterator遍历该集合 提示: 1)使用add()方法将元素添加到ArrayList集合中。 2)调用集合的iterator()方...
  • xiaoye142034
  • xiaoye142034
  • 2017-09-30 14:02:06
  • 969

如何边遍历集合边删除元素--使用Iterator中的remove()方法

在遍历集合时,想将符合条件的某些元素删除,开始是用了下面的方法 public static void main(String[] args) throws UnsupportedEncodingE...
  • huangzebiao007
  • huangzebiao007
  • 2013-12-20 10:45:10
  • 4933

一种删除集合List数据元素的陷阱,论Iterator的重要性

想必很多经验不够丰富的java工程师在对数据集合进行删除操作时都会直接调用remove进行操作,然而这里面却存在一个巨大的陷阱,废话不多说,看下面的Demo: 1 /**************...
  • haming06
  • haming06
  • 2017-08-08 16:59:33
  • 169

面试题:Iterator遍历的添加删除

list是一个ArrayList的对象,哪个选项的代码填到//todo delete处,可以在Iterator遍历的过程中正确并安全的删除一个list中保存的对象?()Iterator it = li...
  • Mrzhoug
  • Mrzhoug
  • 2016-06-11 08:50:06
  • 4621

循环删除list中元素的方法

我的总结:这个小知识点在阿里巴巴开发手册,以及很多图书上都看到过,其实我们如果不注意,使用的时候很容易惯性思维的用for循环来删除,如果只删除一个特定元素,还不会报错,但是如果后期集合改变的话,很容易...
  • Huangcsdnjava
  • Huangcsdnjava
  • 2017-07-12 21:36:54
  • 244
    个人资料
    持之以恒
    等级:
    访问量: 4237
    积分: 623
    排名: 8万+
    文章存档