这是我的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));
}
答案 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}