HashMap 打乱了自身元素的顺序
HashMap messes up the order of its own elements
正如标题一样简单,我已经搜索过了,但我没有找到任何关于这个问题的信息,我很确定我只是误解了 HashMap 如何处理它自己的元素。
Super-simplest代码:
HashMap<String, Integer> map = new HashMap<String, Integer>();
map.put("first key", 1);
map.put("second key", 2);
map.put("third key", 3);
System.out.println(map.toString());
println() 方法显示什么?
它显示了这个:
{third key=3, first key=1, second key=2}
我严格按照程序员放入的 HashMap 存储元素。
即使是排序也会像我把它们放在原点一样放置这些元素。
我尝试更改单词并发生类似的事情(只是位置发生了变化,但无论如何它们都是 "wrong")。 :/
你知道为什么吗?
提前致谢:/
编辑:Rohit Jain 实际上是第一个回复我的评论,你们告诉我 LinkedHashMap,所以你们帮我解决了,非常感谢 :)
您正在寻找 LinkedHashMap
保留插入顺序。
如果您想通过 插入 顺序遍历您的键,您需要使用 LinkedHashMap
代替。 HashMap
documentation 明确指出
This class makes no guarantees as to the order of the map; in particular, it does not guarantee that the order will remain constant over time.
HashMap 不保留顺序:
This class makes no guarantees as to the order of the map; in particular, it does not guarantee that the order will remain constant over time. --javadoc
你想要LinkedHashMap:
LinkedHashMap<String, Integer> map = new LinkedHashMap<String, Integer>();
map.put("first key", 1);
map.put("second key", 2);
map.put("third key", 3);
System.out.println(map.toString());
输出:
{first key=1, second key=2, third key=3}
如果你只关心 toString,你也可以使用 TreeMap。
HashMap 不保证任何类型的排序。
来自java docs:
This class makes no guarantees as to the order of the map
如果要维持秩序可以使用LinkedHashMap
http://docs.oracle.com/javase/7/docs/api/java/util/HashMap.html
此 class 不保证地图的顺序;特别是,它不保证顺序会随着时间的推移保持不变。
有不同的 Map 类型,对其键顺序有不同的保证(参见 this)。
HashMap
: 未定义其元素的顺序。
LinkedHashMap
: 顺序由插入定义。
TreeMap
:顺序由其元素的compareTo()
方法定义。
因此,HashMap 不保证其迭代顺序。插入另一个元素后,您将获得不同的排序。根据您的描述,LinkedHashMap
可能就是您所需要的。
正如标题一样简单,我已经搜索过了,但我没有找到任何关于这个问题的信息,我很确定我只是误解了 HashMap 如何处理它自己的元素。 Super-simplest代码:
HashMap<String, Integer> map = new HashMap<String, Integer>();
map.put("first key", 1);
map.put("second key", 2);
map.put("third key", 3);
System.out.println(map.toString());
println() 方法显示什么? 它显示了这个:
{third key=3, first key=1, second key=2}
我严格按照程序员放入的 HashMap 存储元素。 即使是排序也会像我把它们放在原点一样放置这些元素。 我尝试更改单词并发生类似的事情(只是位置发生了变化,但无论如何它们都是 "wrong")。 :/ 你知道为什么吗?
提前致谢:/
编辑:Rohit Jain 实际上是第一个回复我的评论,你们告诉我 LinkedHashMap,所以你们帮我解决了,非常感谢 :)
您正在寻找 LinkedHashMap
保留插入顺序。
如果您想通过 插入 顺序遍历您的键,您需要使用 LinkedHashMap
代替。 HashMap
documentation 明确指出
This class makes no guarantees as to the order of the map; in particular, it does not guarantee that the order will remain constant over time.
HashMap 不保留顺序:
This class makes no guarantees as to the order of the map; in particular, it does not guarantee that the order will remain constant over time. --javadoc
你想要LinkedHashMap:
LinkedHashMap<String, Integer> map = new LinkedHashMap<String, Integer>();
map.put("first key", 1);
map.put("second key", 2);
map.put("third key", 3);
System.out.println(map.toString());
输出:
{first key=1, second key=2, third key=3}
如果你只关心 toString,你也可以使用 TreeMap。
HashMap 不保证任何类型的排序。
来自java docs:
This class makes no guarantees as to the order of the map
如果要维持秩序可以使用LinkedHashMap
http://docs.oracle.com/javase/7/docs/api/java/util/HashMap.html
此 class 不保证地图的顺序;特别是,它不保证顺序会随着时间的推移保持不变。
有不同的 Map 类型,对其键顺序有不同的保证(参见 this)。
HashMap
: 未定义其元素的顺序。
LinkedHashMap
: 顺序由插入定义。
TreeMap
:顺序由其元素的compareTo()
方法定义。
因此,HashMap 不保证其迭代顺序。插入另一个元素后,您将获得不同的排序。根据您的描述,LinkedHashMap
可能就是您所需要的。