我有一个HashMap
,我正在从中添加整数。关键是整数,值是整数的重复数。当我遍历HashMap
获取HashMap
中的密钥时,它们似乎是随机排列的。有没有添加这些密钥的特定顺序?这是我正在迭代的方式。将整数添加到HashMap
Set<String> a = names.keySet();
Iterator i = a.iterator();
while(i.hasNext())
String t = (String) i.next();
我有一个HashMap
,我正在从中添加整数。关键是整数,值是整数的重复数。当我遍历HashMap
获取HashMap
中的密钥时,它们似乎是随机排列的。有没有添加这些密钥的特定顺序?这是我正在迭代的方式。将整数添加到HashMap
Set<String> a = names.keySet();
Iterator i = a.iterator();
while(i.hasNext())
String t = (String) i.next();
实际上,在非确定性(不可预测/不可靠的)顺序HashMap
返回条目。如果您希望通过键按顺序显示条目(所以,2
在3
之前),请使用TreeMap
(javadoc)。如果要通过初始插入顺序显示条目,请使用LinkedHashMap
(javadoc)。
编辑补充:你说,“关键是整数”,但你使用String
无处不在。请注意,字符串"123"
在之前的字符串"23"
,就像将在"bc"
之前排序一样。如果你想把你的钥匙当作数字来处理,例如通过按数字顺序排序,那么您应该使用数字类型,例如Integer
,而不是String
。 (这是技术上是可行的,让您的TreeMap
一个Comparator<String>
通过检查的内容,做一个整数比较的是字符串值的键进行比较,但我不认为你想这样做。)
这个类(HashMap)不保证地图的顺序;在 特别是,它不保证该顺序恒久不变 随着时间的推移
您可以使用SortedMap如果你喜欢他们的“自然秩序”。
如果你想Iterator
在顺序返回键添加它们,你可以LinkedHashMap代替
此链接列表定义了迭代顺序,这通常是在哪个键被插入到 顺序地图(插入顺序)
'LinkedHashMap'也支持访问排序。 – oldrinb
+1击败了我:P – MadProgrammer
我观察到使用LinkedHashMap按给定顺序存储密钥。我尝试使用TreeMap,并没有按照排序顺序准确返回键。你能提供一个例子吗? – AndroidDev93
@RaghavShankar'TreeMap'将保证键是字典升序,因为这是'String.compareTo'施加的顺序。 – oldrinb