iterator的基本用法.iterator()、.remove()、.listIterator()、.next()、.previous()

本文详细介绍了Java中Iterator和ListIterator的使用,包括它们在遍历集合时的不同以及如何进行元素的删除操作。示例代码演示了正向和反向遍历,并强调了在遍历过程中使用迭代器的`remove()`方法的重要性,以及并发修改异常的避免。
摘要由CSDN通过智能技术生成

1.iterator输出

package com.iterator.demo;

import java.util.Iterator;
import java.util.Set;

public class IteratorDemo {
    public static void main(String[] args) {
        Set<String> all = Set.of("Hello", "world","sina","sohu");
        Iterator<String> iter = all.iterator();
        while (iter.hasNext()) {
            String string = iter.next();
            System.out.println(string);
        }
    }
}

运行结果:

world
hello
sina
sohu

2.remove()删除当前元素

package com.iterator.demo;

import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;

public class IteratorDemo {
    public static void main(String[] args) {
        Set<String> all = new HashSet<String>();
        all.add("hello");
        all.add("world");
        all.add("sina");
        all.add("sohu");
        Iterator<String> iter = all.iterator();
        while (iter.hasNext()) {
            String string = iter.next();
            System.out.println(string);
            if("world".equals(string)) {
                iter.remove();//删除当前的数据
            }
        }
        System.out.println(all);
    }
}

运行结果:

world
hello
sina
sohu
[world, hello, sina, sohu]

3.如果使用Collection中的remove()方法,则会报并发修改异常。

package com.iterator.demo;

import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;

public class IteratorDemo {
    public static void main(String[] args) {
        Set<String> all = new HashSet<String>();
        all.add("hello");
        all.add("world");
        all.add("sina");
        all.add("sohu");
        Iterator<String> iter = all.iterator();
        while (iter.hasNext()) {
            String string = iter.next();
            System.out.println(string);
            all.remove("world");//删除当前的数据
        }
        System.out.println(all);
    }
}

运行结果:

world
Exception in thread "main" java.util.ConcurrentModificationException
    at java.base/java.util.HashMap$HashIterator.nextNode(HashMap.java:1490)
    at java.base/java.util.HashMap$KeyIterator.next(HashMap.java:1513)
    at com.iterator.demo.IteratorDemo.main(IteratorDemo.java:16)

所以,必须使用iterator提供的remove()方法来删除,但是不是必须的情况下,我们很少使用iterator的remove()方法。

4.ListIterator双向迭代

如果想实现由后向前的遍历,那么首先要实现由前向后遍历。

package com.iterator.demo;

import java.util.ArrayList;
import java.util.List;
import java.util.ListIterator;

public class IteratorDemo {
    public static void main(String[] args) {
        List<String> all = new ArrayList<String>();
        all.add("hello");
        all.add("world");
        all.add("sina");
        all.add("sohu");
        ListIterator<String> iter = all.listIterator();
        System.out.print("由前向后遍历:");
        while (iter.hasNext()) {
            System.out.print(iter.next()+"、");
        }
        System.out.print("\n由后向前遍历:");
        while (iter.hasPrevious()) {
            System.out.print(iter.previous()+"、");
        }
    }
}

运行结果:

由前向后遍历:hello、world、sina、sohu、
由后向前遍历:sohu、sina、world、hello、

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值