risc-v中文社区

 找回密码
 立即注册
查看: 975|回复: 0

[原创] java for risc-v系列知识讲座(11)--- Iterator

[复制链接]

20

主题

23

帖子

96

积分

注册会员

Rank: 2

积分
96
发表于 2021-8-16 16:03:56 | 显示全部楼层 |阅读模式
遍历java集合的时候,除了上帖中所说的Enumeration枚举器之外,还有迭代器Iterator接口,Iterator接口有三个方法:hasNext,next,remove,
也就是说迭代器Iterator相比Enumeration枚举器来说,基本上只是多了一个remove,Iterator的实验代码如下:
List<String> ls = new ArrayList<>(Arrays.asList("a","b","c","d"));
Iterator<String> it = ls.iterator();
while(it.hasNext()) {
        String v = it.next();
        if(v.equalsIgnoreCase("b"))
                it.remove();
        else
                System.out.println("it.next=" + v);
}
for(String v:ls) {
        System.out.println(v);
}

显示:
it.next=a
it.next=c
it.next=d
a
c
d

所以说,当需要查找数据时要remove,则只能用迭代器Iterator不能用枚举器Enumeration。
但是如果代码是:
List<String> ls = Arrays.asList("a","b","c","d");
Iterator<String> it = ls.iterator();
while(it.hasNext()) {
        String v = it.next();
        if(v.equalsIgnoreCase("b"))
                it.remove(); //这句出异常
        else
                System.out.println("it.next=" + v);
}
for(String v:ls) {
        System.out.println(v);
}

显示:
it.next=a
Exception in thread "main" java.lang.UnsupportedOperationException

这说明虽然都是 List而产生的迭代器iterator,但Arrays.asList产生的List则不能remove,只能Arraylist产生的iterator才能remove。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



Archiver|手机版|小黑屋|risc-v中文社区

GMT+8, 2024-5-4 22:04 , Processed in 0.014471 second(s), 17 queries .

risc-v中文社区论坛 官方网站

Copyright © 2018-2021, risc-v open source

快速回复 返回顶部 返回列表