HashMap遍历有序性问题——map.entrySet()的无序性

在LeetCode刷题的时候,在一道返回 字符串中最早出现的只出现一次的字符下标的题目中,使用大HashMap的遍历方式,我选择了使用map.entrySet()获取节点集合的方式进行遍历。

题目和代码如下:

在一个字符串(0<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,
并返回它的位置, 如果没有则返回 -1(需要区分大小写)

本来以为越早插入的数据遍历的时候会越早遍历到,按照条件要求,只要找到第一个 value值不等于-1的数据,就可以返回,然而事实并非如此,在下面这个测试用例中,有两个只出现一次的字符,也就是 l 和 e,按理说应该先遍历到l,但是偏偏返回e的下标: 看了Map.Entry<Key,Value>的源代码和HashMap的源代码,也没有看出个所以然,于是修改了一下代码,加了一个最小下标的判断条件,终于找出了最早出现的无重复出现的字符下标: 总结: 在使用map.entrySet()对HashMap进行遍历的时候,不能确保遍历的有序性,在强烈依赖遍历的有序性的情况下,尽量避免使用map.entrySet()。

经验分享 程序员 微信小程序 职场和发展