Hashmap是否自动排序?

Dom*_*omi 7 java date hashmap

这是我的hashmap:

HashMap<Long, Day> hashMapTest = new HashMap<Long, Day>();
Run Code Online (Sandbox Code Playgroud)

我插入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);
  }
Run Code Online (Sandbox Code Playgroud)

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

for (Long name : hashMapTest.keySet())
 {
     Window.alert(name + ": " + hashMapTest.get(name));
 }
Run Code Online (Sandbox Code Playgroud)

Jun*_*san 11

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

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


小智 6

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

HashMap:没有排序和没有保留键/值的插入顺序

LinkedHashMap:保留插入顺序

TreeMap:按键排序

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

请参阅此处以获得更好的理解示例.


Men*_*ena 5

不, HashMap s 不会自动对它们的键进行排序。

你想要一个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);
Run Code Online (Sandbox Code Playgroud)

输出

HashMap: {0=null, 1=null}
TreeMap: {0=null, 1=null}
LinkedHashMap: {1=null, 0=null}
Run Code Online (Sandbox Code Playgroud)