2012-09-03 92 views
0

我有一个HashMap,我正在从中添加整数。关键是整数,值是整数的重复数。当我遍历HashMap获取HashMap中的密钥时,它们似乎是随机排列的。有没有添加这些密钥的特定顺序?这是我正在迭代的方式。将整数添加到HashMap

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

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

回答

4

实际上,在非确定性(不可预测/不可靠的)顺序HashMap返回条目。如果您希望通过键按顺序显示条目(所以,23之前),请使用TreeMapjavadoc)。如果要通过初始插入顺序显示条目,请使用LinkedHashMapjavadoc)。


编辑补充:你说,“关键是整数”,但你使用String无处不在。请注意,字符串"123"在之前的字符串"23",就像​​将在"bc"之前排序一样。如果你想把你的钥匙当作数字来处理,例如通过按数字顺序排序,那么您应该使用数字类型,例如Integer,而不是String。 (这是技术上是可行的,让您的TreeMap一个Comparator<String>通过检查的内容,做一个整数比较的是字符串值的键进行比较,但我不认为你想这样做。)

+0

+1击败了我:P – MadProgrammer

+0

我观察到使用LinkedHashMap按给定顺序存储密钥。我尝试使用TreeMap,并没有按照排序顺序准确返回键。你能提供一个例子吗? – AndroidDev93

+2

@RaghavShankar'TreeMap'将保证键是字典升序,因为这是'String.compareTo'施加的顺序。 – oldrinb

2

JavaDocs

这个类(HashMap)不保证地图的顺序;在 特别是,它不保证该顺序恒久不变 随着时间的推移

您可以使用SortedMap如果你喜欢他们的“自然秩序”。

如果你想Iterator在顺序返回键添加它们,你可以LinkedHashMap代替

此链接列表定义了迭代顺序,这通常是在哪个键被插入到 顺序地图(插入顺序)

+0

'LinkedHashMap'也支持访问排序。 – oldrinb