Map和Set的迭代器原理

最近在复习Java集合类型的知识,突然发现Map的遍历问题,因为Map不是Collection,只有Collection才能使用迭代器进行遍历,但是Map的遍历方法里面又有使用迭代器去进行遍历的例子,所以研究了一下这个问题。

直接说结论:
  1. Map确实不是直接使用迭代器进行遍历的,本质上是将Map的键或值或者键值对转换成Set,然后调用Set的迭代器进行遍历,因为Set属于Collection。
二、Set的迭代器又是如何工作的

虽然知道了Map是通过Set的迭代器去进行遍历的,但是Set的底层不就是Map存的吗,只是Set只使用Map的key,默认将value的设为null而已,Set的迭代器又是如何工作的呢。

直接说结论:
  1. 因为Set使用了Map作为底层数据结构,以HashSet为例,要遍历HashSet肯定就要遍历底层的HashMap,HashSet的迭代器本质上是遍历了HashMap的底层数组,判断每个数组下标的值是否为null,不为null就遍历这条链表,直到这条链表遍历完就去找下一个数组下标,如此循环知道遍历完数组所有的下标也就完成了HashMap的遍历。

相关推荐

  1. MapSet原理

    2024-07-17 01:18:03       20 阅读
  2. 生成器

    2024-07-17 01:18:03       28 阅读
  3. python 介绍 map() 函数

    2024-07-17 01:18:03       19 阅读
  4. C#

    2024-07-17 01:18:03       69 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-17 01:18:03       67 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-17 01:18:03       72 阅读
  3. 在Django里面运行非项目文件

    2024-07-17 01:18:03       58 阅读
  4. Python语言-面向对象

    2024-07-17 01:18:03       69 阅读

热门阅读

  1. tomcat为什么要自定义类加载器?

    2024-07-17 01:18:03       20 阅读
  2. Web 安全之 VAPT (漏洞评估与渗透测试)详解

    2024-07-17 01:18:03       20 阅读
  3. VScode编译c++代码json配置

    2024-07-17 01:18:03       23 阅读
  4. 【DRAM存储器三十四】LPDDR4介绍--MR和IO结构

    2024-07-17 01:18:03       17 阅读
  5. AI发展中的伦理挑战与应对策略

    2024-07-17 01:18:03       23 阅读
  6. 2024睿抗机器人开发者大赛CAIP编程赛题解(c++)

    2024-07-17 01:18:03       25 阅读
  7. ardupilot 系统时间见解

    2024-07-17 01:18:03       16 阅读
  8. EFFICIENT MODULATION FOR VISION NETWORKS

    2024-07-17 01:18:03       16 阅读