HashMap已按键排序?

我认为HashMap是无序的,当迭代键时,你不知道命令是什么? 在此示例中,看起来地图已按键编号排序:

import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; public class Test { public static void main(String[] args) { String[] words = {"Car", "Cat" ,"Hello", "World", "Hi", "Bye", "Dog", "Be"}; Map<Integer, ArrayList> map = new HashMap<Integer, ArrayList>(); for (String word: words) { Integer len = word.length(); List l = map.get(len); if (l == null) { l = new ArrayList(); l.add(word); map.put(len, (ArrayList) l); } else { if (! l.contains(word)) l.add(word); } } System.out.println(map); } } 

输出:

 {2=[Hi, Be], 3=[Car, Cat, Bye, Dog], 5=[Hello, World]} 

是的,但无法保证维持该顺序。

来自Hashmap文档

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

你的替补标记不足以决定它。

查看TreeMap如果需要排序顺序

地图根据其键的自然顺序进行排序,或者根据使用的构造函数在地图创建时提供的比较器进行排序

对于小的hashCodes,HashMap变成一个数组(因为这是在下面使用的)没有要求它这样做,但它恰好是最简单的实现。

简而言之,如果向HashSet或HashMap添加0到10,您将按顺序获取它们,因为容量足够大,可以按顺序布局这些值。

Treemap是一个有序的映射,其中包含按排序顺序排列的键,而HashMap无法保证您排序的map.So,总是在需要排序键时选择Treemap