Hashmap是否自动排序?

时间:2014-10-10 10:07:33

标签: java date hashmap

这是我的hashmap:

HashMap<Long, Day> hashMapTest = new HashMap<Long, Day>();

我将Date.getTime()插入此hashmap,如:

Date start = new Date(vonDatum.getTime());

for (int i = 0; i < tagediff; i++)
  {
    Day day= new Day(start);
    this.mitarbeiterTagHashMap.put(start.getTime(), day);
    CalendarUtil.addDaysToDate(start, 1);
  }

奇怪的是,当我调用hashmap时,顺序完全是另一个,并且键不适合插入:

for (Long name : hashMapTest.keySet())
 {
     Window.alert(name + ": " + hashMapTest.get(name));
 }

3 个答案:

答案 0 :(得分:7)

  

奇怪的是当我调用hashmap时,顺序是   completly另一个,键不适合插入:

HashMap不保持插入顺序,但有一个名为LinkedHashMap的替代方法可以维护插入顺序。或者,如果您希望按自然顺序对键进行排序(使用按键compareTo方法),那么您可以选择TreeMap

答案 1 :(得分:5)

以下是Java中4个常见的Map接口实现,

HashMap :没有订购&amp;不保留键/值的插入顺序

LinkedHashMap :保留广告订单

TreeMap :按键

排序

HashTable :与HashMap不同,它是同步的

请参阅here以更好地理解示例。

答案 2 :(得分:2)

不,HashMap不会自动对其键进行排序。

您需要TreeMap来排序密钥,或LinkedHashMap来保留广告订单。

以下是一个例子:

long l0 = 0l;
long l1 = 1l;
Map<Long, String> hashMap = new HashMap<Long, String>();
Map<Long, String> treeMap = new TreeMap<Long, String>();
Map<Long, String> linkedHashMap = new LinkedHashMap<Long, String>();
// does not guarantee key order 1, 0
hashMap.put(l1, null);
hashMap.put(l0, null);
// guarantees key order 0, 1
treeMap.put(l1,  null);
treeMap.put(l0,  null);
// guarantees key order 1, 0
linkedHashMap.put(l1,  null);
linkedHashMap.put(l0,  null);
System.out.printf("HashMap: %s%nTreeMap: %s%nLinkedHashMap: %s%n", hashMap, treeMap, linkedHashMap);

<强>输出

HashMap: {0=null, 1=null}
TreeMap: {0=null, 1=null}
LinkedHashMap: {1=null, 0=null}