我有一个HashMap
我要从数组中添加整数。键是整数,值是整数的重复数。当我遍历HashMap
以获取HashMap
中的密钥时,它们似乎是随机顺序。是否有添加这些键的特定顺序?这就是我迭代的方式。
Set<String> a = names.keySet();
Iterator i = a.iterator();
while(i.hasNext())
String t = (String) i.next();
答案 0 :(得分:4)
实际上,HashMap
以非确定性(不可预测/不可靠)的顺序返回条目。如果您希望按键按顺序显示条目(2
之前3
),请使用TreeMap
(javadoc)。如果您希望条目按初始插入顺序显示,请使用LinkedHashMap
(javadoc)。
编辑添加:你说&#34;键是整数&#34;,但是你到处都使用String
。请注意,字符串"123"
在字符串"23"
之前对进行排序,就像"abc"
在"bc"
之前排序一样。如果您希望将密钥视为数字,例如通过按数字顺序排序,您应该使用数字类型,例如Integer
,而不是String
。 (技术上可以通过检查其内容并进行整数比较,为TreeMap
Comparator<String>
提供比较字符串值的键,但我不认为你想做这一点。)
答案 1 :(得分:2)
来自JavaDocs
此类(HashMap)不保证地图的顺序;在 特别是,它不保证订单将保持不变 随着时间的推移
如果您希望以“自然顺序”使用SortedMap,则可以使用LinkedHashMap。
如果您希望Iterator
按照添加顺序返回密钥,则可以{{3}}代替
此链接列表定义了迭代排序,通常是 键被插入到地图中的顺序(插入顺序)