栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

迭代器(Iterator)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

迭代器(Iterator)

什么是迭代器Iterator
Iterator是java中的⼀个接⼝, Iterator 主要用于迭代访问(即遍历) Collection 中的元素,因此 Iterator 对象也被称为迭代器。当容器实现了Iterator接⼝后,可以通过调⽤Iterator()⽅法获取⼀个 Iterator对象
为啥是调⽤容器⾥⾯的Iterator⽅法呢?
因为容器的实现有多种,不同的容器遍历规则不⼀样,⽐如
ArrayList/linkedList/HashSet/TreeSet等,所以设计了Iterator接⼝,让容器本身去实现这个接⼝,实现⾥⾯的⽅法,从⽽让开发⼈员不⽤关系容器的遍历机制,直接使⽤对应的⽅法即可
三个核⼼⽅法
1.boolean hashNext()
⽤于判断iterator内是否有下个元素,如果有则返回true,``没有则false
2.Obejct next() 第一次调用Iterator的next()方法时,它返回序列的第一个元素。
返回iterator的下⼀个元素,同时指针也会向后移动1位
3.void remove()
删除指针的上⼀个元素(容易出问题,删除元素不建议使⽤容器⾃⼰的⽅法)

 List list = new ArrayList<>();
        list.add("jack");
        list.add("tom");
        list.add("lucy");
        //获取迭代器
        Iterator iterator = list.iterator();
        //遍历+移除
        while(iterator.hasNext()){
            if (iterator.next().equals("jack")){
                iterator.remove();
            }
        }
        System.out.println(list);
//Set遍历
        while(iterator.hasNext()){
            System.out.println(iterator.next());
        }
`public static void testSet(){
 Set set = new HashSet<>();
 set.add("jack");
 set.add("tom");
 set.add("marry");
 set.add("tony");
 set.add("jack");
 Iterator iterator = set.iterator();
 while (iterator.hasNext()){
 String str = iterator.next();
 System.out.println(str);
 }
 }
 


//遍历map容器有两种方法(思路变成Set集合)
//1.获得节点的Set集合, Entry是map中的一个节点
Set > entrySet = map.entrySet();
Iterator> iterator=entrySet.iterator();
while(iterator.hasNext()){
  Map.Entry entry = iterator.next();
System.out.println("key: "+entry.getKey()+" value: "+entry.getValue());
//不能用这种写法,这样调用了两次next,指针会移动两次
// System.out.println("key:"+iterator.next().getKey()+",value: "+iterator.next().getValue());
        }



  //2.把key变成Set集合
        Set keySet = map.keySet();
  Iterator iterator = keySet.iterator();
        while(iterator.hasNext()){
            Integer key=iterator.next();
System.out.println("key: "+key+",value: "+map.get(key));
        }


注意事项:
1.只有当next执⾏完后,才能调⽤remove函数
2.如要删除第⼀个元素,不能直接调⽤ remove(),要先next()下,否则调⽤remove⽅法是会抛出异常的
3.迭代器遍历元素时不能通过Collection接⼝中的remove⽅法删除元素,只能⽤Iterator的remove⽅法删除元素; **原因 某个线程在 Collection 上进⾏迭代时,不允许另⼀个线程修改该Collection**
4.**迭代出的对象是引⽤的拷⻉,如果修改迭代中的元素,那么就是修改容器对象的本身**
5.和for循环对⽐
1.for循环适合顺序访问,或者通过下标进⾏访问的
2.迭代器适合链式结构
3.最终看使⽤场景,性能会有轻微差别,但是可以忽略
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/782671.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号