力扣题387,官方答案第二种解法,哈希表存储索引。
针对答案遍历哈希表时产生疑惑,如果按照put存入哈希表的顺序排序的话,只需要找到第一个不为-1的value值就可以break跳出循环。

测试代码:

public class test02 {public static void main(String[] args) {Map<String,Integer> map = new HashMap();//添加元素map.put("fafbb", 1242);map.put("gdada", 82);map.put("dgagg", 345);map.put("gdada", 5000);//key重复map.put("kona", 345);//value重复for(Object key:map.keySet()){System.out.println(key+"\t"+map.get(key));}}
}

输出:

fafbb    1242
kona    345
gdada   5000
dgagg   345

从输出数据可以看出key值重复会被覆盖,而value值重复则没有影响。
从输出顺序可以看出,哈希表内部排序没有按照存入的顺序排序,同时也没有按照首字母升序或者降序来排序。

解释:
HashMap是一个最常用的Map,它根据键的hashCode值存储数据,按照HashCode编码进行从小到大的排序。在根据键可以直接获取它的值,具有很快的访问速度。HashMap最多只允许一条记录的键为NULL,允许多条记录的值为NULL。

HashCode编码:
HashCode的具体编码方式,比较复杂(事实上这个编码是可以由程序员通过继承和接口的实现重写的)。

解决:
利用LinkedHashMap创建哈希表。

    Map<String,Integer> map = new LinkedHashMap();

LinkedHashMap保存了记录的插入顺序,在用Iterator遍历LinkedHashMap时,先得到的记录肯定是先插入的。在遍历的时候会比HashMap慢TreeMap能够把它保存的记录根据键排序,默认是按升序排序,也可以指定排序的比较器。当用Iterator遍历TreeMap时,得到的记录是排过序的。

结论:
力扣提387需要通过以下代码完整遍历整个哈希表,找到最小的索引值。

        for (Map.Entry<Character, Integer> entry : position.entrySet()) {int pos = entry.getValue();if (pos != -1 && pos < first) {first = pos;}}

哈希表的排序规则——HashCode编码相关推荐

  1. DSt:数据结构的最强学习路线之数据结构知识讲解与刷题平台、刷题集合、问题为导向的十大类刷题算法(数组和字符串、栈和队列、二叉树、堆实现、图、哈希表、排序和搜索、动态规划/回溯法/递归/贪心/分治)总

    DSt:数据结构的最强学习路线之数据结构知识讲解与刷题平台.刷题集合.问题为导向的十大类刷题算法(数组和字符串.栈和队列.二叉树.堆实现.图.哈希表.排序和搜索.动态规划/回溯法/递归/贪心/分治)总 ...

  2. 批量修改mysql数据库表的排序规则

    由于我设计表时,忘了把排序规则修改为utf8_general_ci(多语言,不区分大小写).故而查询时报了找不到表. 但是我的表是存在的. 所以最后发现我的排序规则是 utf8_bin 查询时不区分大 ...

  3. CSP认证201503-2 数字排序[C++题解]:哈希表、排序、结构体

    题目分析 来源:acwing 分析: 统计出现次数,用哈希表(这里用数组模拟一下),然后用结构体数组来存,而且方便排序. ac代码 #include<bits/stdc++.h> usin ...

  4. PAT甲级1153 Decode Registration Card of PAT :[C++题解]结构体、哈希表、排序、类似数据库查询题、好题

    文章目录 题目分析 题目来源 题目分析 来源:acwing 分析: 本题是三种不同的询问,难道要写三个结构体?想了想,就写了一个结构体,参赛人结构体,内容包括考号id和成绩grade,然后开结构体数组 ...

  5. 剑指 Offer II 114. 外星文字典(困难 图 bfs 哈希表 拓扑排序 字符串 数组)

    剑指 Offer II 114. 外星文字典 现有一种使用英语字母的外星文语言,这门语言的字母顺序与英语顺序不同. 给定一个字符串列表 words ,作为这门语言的词典,words 中的字符串已经 按 ...

  6. mysql 回退查询_MYSQL数据库表排序规则不一致导致联表查询,索引不起作用问题...

    Mysql数据库表排序规则不一致导致联表查询,索引不起作用问题 表更描述: 将mysql数据库中的worktask表添加ishaspic字段. 具体操作:(1)数据库worktask表新添是否有图片字 ...

  7. mysql改了排序规则不生效_Mysql数据库表排序规则不一致导致联表查询,索引不起作用问题...

    Mysql数据库表排序规则不一致导致联表查询,索引不起作用问题 表更描述: 将mysql数据库中的worktask表添加ishaspic字段. 具体操作:(1)数据库worktask表新添是否有图片字 ...

  8. mysql的四个默认数据库是什么版本,MySQL5.7数据库字符集和排序规则有四个级别的默认设置:服务器,数据库,表和列。...

    MySQL5.7数据库字符集和排序规则有四个级别的默认设置:服务器,数据库,表和列. 最初,服务器字符集和排序规则取决于启动mysqld时使用的选项.可以使用 --character-set-serv ...

  9. 在C#中应用哈希表(Hashtable)

    一,哈希表(Hashtable)简述 在.NET Framework中,Hashtable是System.Collections命名空间提供的一个容器,用于处理和表现类似key/value的键值对,其 ...

最新文章

  1. PaSS:用于 PacBio 测序的测序模拟器
  2. 【leetcode】97. Interleaving String
  3. 【opencv】——钢管计数(霍夫圆变换 + 阈值 + canny)
  4. android 加载显示富文本——TextView显示富文本和WebView显示富文本,WebView显示图片适配屏幕宽度
  5. nginx搭建文件服务器脚本,基于docker搭建nginx文件服务器的方法步骤
  6. linux的终端下的命令行管道|的简单实现
  7. 【Vue】—props属性
  8. 科技部:推进人工智能和实体经济深度融合 壮大智能经济
  9. 数电/数字电子技术基础全面知识点及习题总结(看这一篇就够了!!!)
  10. 华为桌面云解决方案概述_解决方案概述和数据安全建议
  11. React项目实现导出PDF的功能
  12. cyj等于什么英语单词_CYJ是什么意思
  13. css实现图片翘边阴影
  14. Callnovo如何因小见大,高端定制——“快乐的音符跳动在异国他乡”篇
  15. 拓扑排序及逆拓扑排序
  16. db2 修改表空间自增长_db2自动调整表空间的大小 - 木子日京的个人空间 - 51Testing软件测试网 51Testing软件测试网-软件测试人的精神家园...
  17. Tokyo Dystopia 1000w数据测试
  18. VBA 关键字匹配查找
  19. 【安全知识分享】DOCX|最新应急管理法律法规清单(附下载)
  20. 树莓派挂载硬盘以及播放视频

热门文章

  1. 哪些值得推荐的文件在线转换器
  2. CTF解题记录-Misc-图片隐写术+摩尔密码
  3. Python培训出来真的好找工作吗?好找工作的关键是什么?
  4. 韦东山:闲鱼与盗版更配,起诉到底绝不和解!
  5. 如何把网页的快捷方式放在桌面
  6. 用户需求你真的了解吗?
  7. 【Java异常】Failed to determine a suitable driver class
  8. Rs485—4wire和Rs485—2wire有什么区别
  9. 手机支付购物很时尚,但需警惕安全风险
  10. Apache Geronimo Remote Code Execute Vulnerability