HashMap在加入数据之后会自动排序

今天在使用HashMap对一段有序号的文本段落进行排序后的时候,发现它会自动地排好序。
比如2 xxxx,1 xxxx按照HashMap<String,String>存入之后,遍历HashMap,会得到排好序的键值对:
1 xxxx,2 xxxx。
原因:Map<String, String> map1 = new HashMap<>()增加数据之后,HashMap不会是按照增加数据时候的顺序遍历输出,(也就是存储顺序与遍历顺序不一致),而是会根据String键值排序。

如果要按数据存储的顺序拿出来,可以使用LinkedHashMap。
LinkedHashMap 是HashMap的一个子类,保存了记录的插入顺序。

实例:
图一

图二

sun公司Java API 1.6中文版:
HashMap:
基于哈希表的 Map 接口的实现。此实现提供所有可选的映射操作,并允许使用 null 值和 null 键。(除了非同步和允许使用 null 之外,HashMap 类与 Hashtable 大致相同。)此类不保证映射的顺序,特别是它不保证该顺序恒久不变。

LinkedHashMap:
Map 接口的哈希表和链接列表实现,具有可预知的迭代顺序。此实现与 HashMap 的不同之处在于,后者维护着一个运行于所有条目的双重链接列表。此链接列表定义了迭代顺序,该迭代顺序通常就是将键插入到映射中的顺序(插入顺序)。注意,如果在映射中重新插入 键,则插入顺序不受影响。(如果在调用 m.put(k, v) 前 m.containsKey(k) 返回了 true,则调用时会将键 k 重新插入到映射 m 中。)


版权声明:本文为weixin_43752257原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。