0

我有一个HashMap我正在向其中添加数组中的整数。键是整数,值是整数的重复数。当我遍历HashMap以获取其中的键时,HashMap它们似乎是随机顺序的。添加这些键是否有任何特定顺序?这就是我迭代的方式。

       Set<String> a = names.keySet();
        Iterator i = a.iterator();

        while(i.hasNext())
            String t = (String) i.next();
4

2 回答 2

4

实际上,HashMap以不确定(不可预测/不可靠)的顺序返回条目。如果您希望条目按键顺序显示(so, 2before 3),请使用TreeMap( javadoc )。如果您希望条目按初始插入的顺序显示,请使用LinkedHashMap( javadoc )。


编辑添加:您说“关键是整数”,但随后您String到处使用。请注意,字符串"123"排序字符串之前"23",就像"abc"排序之前一样"bc"。如果您希望您的键被视为数字,例如按数字顺序排序,那么您应该使用数字类型,例如Integer,而不是String。(从技术上讲,可以通过检查它们的内容并进行整数比较来为您TreeMap提供Comparator<String>比较字符串值键的 a,但我认为您不想这样做。)

于 2012-09-03T00:56:14.850 回答
2

来自JavaDocs

这个类(HashMap)不保证地图的顺序;特别是,它不保证订单会随着时间的推移保持不变

如果您希望它们以“自然顺序”排列,则可以使用SortedMap 。

如果您希望按Iterator添加的顺序返回键,您可以改为LinkedHashMap

这个链表定义了迭代顺序,通常是键插入映射的顺序(插入顺序)

于 2012-09-03T00:57:02.347 回答