牛皮了!头一次见大佬把「Map遍历性能问题」详解得如此清晰明了( 三 )


所以此文的目的就当是知识拓展吧 , 除了以上说到的遍历性能问题 , 你还应该从中能获取到的知识点有:
【牛皮了!头一次见大佬把「Map遍历性能问题」详解得如此清晰明了】
HashMap的数组是存储在table数组里的table数组是resize方法初始化的 , new Map不会初始化数组Map遍历是table数组从下标0递增排序的 , 所以他是无序的keySet.iterator , values.iterator ,entrySet.iterator 来说没有本质区别 , 用的都是同一个迭代器各种遍历方法里 , 只有迭代器可以remove , 虽然增强型for循环底层也是迭代器 , 但这个语法糖隐藏了 remove 方法每次调用迭代器方法都会new 一个迭代器 , 但是只有一个可以修改Map.forEach与Stream.forEach看上去一样 , 实际实现是不一样的附:四种遍历源码
牛皮了!头一次见大佬把「Map遍历性能问题」详解得如此清晰明了
本文插图
附:完整测试类与测试结果+一个奇怪的问题
牛皮了!头一次见大佬把「Map遍历性能问题」详解得如此清晰明了
本文插图
牛皮了!头一次见大佬把「Map遍历性能问题」详解得如此清晰明了
本文插图
牛皮了!头一次见大佬把「Map遍历性能问题」详解得如此清晰明了
本文插图
测试结果:
牛皮了!头一次见大佬把「Map遍历性能问题」详解得如此清晰明了
本文插图