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

题目和代码如下:

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


本来以为越早插入的数据遍历的时候会越早遍历到,按照条件要求,只要找到第一个 value值不等于-1的数据,就可以返回,然而事实并非如此,在下面这个测试用例中,有两个只出现一次的字符,也就是 le,按理说应该先遍历到l,但是偏偏返回e的下标:

看了Map.Entry<Key,Value>的源代码和HashMap的源代码,也没有看出个所以然,于是修改了一下代码,加了一个最小下标的判断条件,终于找出了最早出现的无重复出现的字符下标:


总结:
在使用map.entrySet()HashMap进行遍历的时候,不能确保遍历的有序性,在强烈依赖遍历的有序性的情况下,尽量避免使用map.entrySet()

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

  1. HashMap中的遍历有序性探究

    首先HashMap中的keySet是有序的. 输入代码: @Testpublic void testMapSort(){Map<Integer, Integer> map = new Ha ...

  2. java for遍历hashmap_Java中HashMap遍历几种方式

    目录 一.使用迭代器 二.for each 遍历 一.使用迭代器 第一种: Map map = new HashMap(); Iterator iter = map.entrySet().iterat ...

  3. Java基础 HashMap的添加 修改 遍历 Map.Entry Map.entrySet()的使用及实例

    Java Map Map中不能包含相同的键,每个键只能映射一个值. HashMap:并不能保证它的元素的顺序,元素加入散列映射的顺序并不一定是它们被迭代方法读出的顺序. Map.Entry Map.E ...

  4. HashMap有序性与无序性阐述

    1.插入无序 public class HashMapTest {public static void main(String[] args) {HashMap<String, String&g ...

  5. HashMap遍历的两种方式,推荐使用entrySet()

    转自:HashMap遍历的两种方式,推荐使用entrySet() 第一种: Map map = new HashMap(); Iterator iter = map.entrySet().iterat ...

  6. 另一种遍历Map的方式: Map.Entry 和 Map.entrySet()

    源网址: http://blog.csdn.net/mageshuai/article/details/3523116 今天看Think in java 的GUI这一章的时候,里面的TextArea这 ...

  7. HashMap遍历的三种方式,entrySet()和keySet() 还有Java8的foreach

    第一种: Map map = new HashMap(); Iterator iter = map.entrySet().iterator(); while (iter.hasNext()) {    ...

  8. java map遍历顺序_深入理解HashMap遍历元素的顺序

    HashMap遍历元素的顺序. 一,HashMap元素的底层存储顺序 我们都知道HashMap是"无序"的,也就是说不能保证插入顺序.但是,HashMap其实也是有序的,一组相同的 ...

  9. HashMap遍历和使用

    map的几种遍历方式: Map< String, String> map = new HashMap<>(); map.put("aa", "@s ...

最新文章

  1. php通过浏览器下载json文件遇到的问题
  2. CSharpGL(42)借助帧缓存实现渲染到纹理(RenderToTexture)
  3. java面试题001
  4. 30分钟全面解析-SQL事务+隔离级别+阻塞+死锁
  5. python创建线程
  6. 主流大数据平台及解决方案对比
  7. Adobe After Effects CS6 操作记录
  8. python语法_算数运算+赋值运算符+比较运算符+逻辑运算符
  9. Android访问数据库(SQL Server 和 MySQL)
  10. pandas之Dataframe 菜鸟教程
  11. KGB知识图谱凭借OCR文字识别突破文档解析局限
  12. 韩咏梅:幸福只需要七分饱(转自新加坡联合早报)
  13. 地推项目大全_地推吧:app线上推广渠道大全(软件app上新地推)
  14. AutoGPT是什么?超简单安装使用教程
  15. ARM M3小计(一)1~3章。
  16. Android SDK 开发流程
  17. mysql面试学生表_SQL笔试:Student学生表,Course 课程表,Sc选课表
  18. android 关联mp3,手把手教你Android如何使用NDK实现一个MP3转码库
  19. SQL Server R2 报表服务,BIDS中预览带参数的报表,整个BIDS突然关闭
  20. Eclipse修改颜色主题

热门文章

  1. Python基础【day03】:字典(一)
  2. activemq spring监听不了
  3. JS与Jquery学习笔记(一)
  4. win7+vs2008+windows mobile6.5.3
  5. NetBeans+xdebug解决无法连接xdebug问题
  6. mysql怎么从1开始递增
  7. ARC学习笔记(一)
  8. Interesting Finds: 2008.04.24
  9. 【重识 HTML + CSS】官方文档的阅读
  10. PyQt5: This application failed to start because it could not find or load the Qt platform plugin