使用迭代器Iterator遍历Collection问题

 更新时间:2023年11月01日 15:23:15   作者:鼠鼠我呀2  
这篇文章主要介绍了使用迭代器Iterator遍历Collection问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

使用迭代器Iterator遍历Collection

实现LRU算法时,发现使用java的LinkedHashMap时如果删除队头元素(最长时间未访问的元素),需要

coll.remove(coll.keySet().iterator().next());

因为Map中元素无序,根据key的hashCode()排序,而LinkedHashMap虽然有序,但是无法获取队头和队尾元素,所以只能采用迭代器模式。

java.utils包下定义的迭代器接口:Iterator。

Iterator对象称为迭代器(设计模式的一种),主要用于遍历 Collection 集合中的元素。

GOF给迭代器模式的定义为:提供一种方法访问一个容器(container)对象中各个元素,而又不需暴露该对象的内部细节。迭代器模式,就是为容器而生。

作用:遍历集合Collectiton元素

如何获取实例:coll.iterator()返回一个迭代器实例

遍历的代码实现

Iterator iterator = coll.iterator();
//hasNext():判断是否还下一个元素
while(iterator.hasNext()){
    //next():①指针下移 ②将下移以后集合位置上的元素返回
    System.out.println(iterator.next());
}

图示说明


 

获取LinkedHashMap中的头部元素(最早添加的元素):

  • 时间复杂度O(1)
int headNode=map.keySet().iterator().next();

获取LinkedHashMap中的末尾元素(最近添加的元素):

  • 时间复杂度O(n)
	LinkedHashMap<Integer, Integer> map = new LinkedHashMap<>();
        map.put(2, 2);
        map.put(1, 1);
        Iterator<Integer> iterator = map.keySet().iterator();
        int tail = 0;
        while (iterator.hasNext()) {
            tail = iterator.next();
        }
        System.out.println(tail);//1
	

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • java 实现比较版本号功能

    java 实现比较版本号功能

    本篇文章主要介绍了java 中涉及到客户端的系统经常需要用到比较版本号的功能,并附小示例,希望能帮助需要的小伙伴
    2016-07-07
  • Java程序部署到服务器上,接口请求下载文件失败/文件为空/文件名不对的问题

    Java程序部署到服务器上,接口请求下载文件失败/文件为空/文件名不对的问题

    这篇文章主要介绍了Java程序部署到服务器上,接口请求下载文件失败/文件为空/文件名不对,本文给大家分享错误原因及解决方法,需要的朋友可以参考下
    2020-07-07
  • java对同一个文件进行读写操作方法

    java对同一个文件进行读写操作方法

    在本篇文章里我们给大家详细讲述了java对同一个文件进行读写操作的方法和知识点,需要的朋友们可以参考学习下。
    2018-10-10
  • Java的位图和布隆过滤器深入详细讲解

    Java的位图和布隆过滤器深入详细讲解

    这篇文章主要介绍了Java的位图和布隆过滤器,在学习之前的数据结构的时候,我们使用的数据量都不是很大,但是在生活中,我们常常面临着要处理大量数据结果并得出最终结果,那么有没有什么数据结构可以帮助我们实现这样的功能呢,想要继续了解的朋友可以参考下
    2024-10-10
  • Java实现FutureTask的示例详解

    Java实现FutureTask的示例详解

    在并发编程当中我们最常见的需求就是启动一个线程执行一个函数去完成我们的需求,而在这种需求当中,我们需要函数有返回值。Java给我们提供了这种机制,去实现这一个效果:FutureTask。本文为大家准备了Java实现FutureTask的示例代码,需要的可以参考一下
    2022-08-08
  • 原理分析Java Mybatis中的Mapper

    原理分析Java Mybatis中的Mapper

    这篇文章主要为大家介绍了Java Mybatis中的Mapper,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-01-01
  • Java多线程编程之CountDownLatch同步工具使用实例

    Java多线程编程之CountDownLatch同步工具使用实例

    这篇文章主要介绍了Java多线程编程之CountDownLatch同步工具使用实例,需要的朋友可以参考下
    2015-05-05
  • java中volatile不能保证线程安全(实例讲解)

    java中volatile不能保证线程安全(实例讲解)

    下面小编就为大家带来一篇java中volatile不能保证线程安全(实例讲解)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-09-09
  • Java反射机制的讲解

    Java反射机制的讲解

    今天小编就为大家分享一篇关于Java反射机制的讲解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-04-04
  • Java中的排序与内部比较器Compareable解析

    Java中的排序与内部比较器Compareable解析

    这篇文章主要介绍了Java中的排序与内部比较器Compareable解析,一般没有特殊要求时,直接调用(底层默认的升序排列)就可以得到想要的结果,所谓的 sort 方法排序底层都是基于这两种排序,故如果需要设计成所想要的排序就需要了解底层排序原理,需要的朋友可以参考下
    2023-11-11

最新评论