Java Hashmap是否自动排序?
这是我的hashmap:Java Hashmap是否自动排序?,java,date,hashmap,Java,Date,Hashmap,这是我的hashmap: HashMap<Long, Day> hashMapTest = new HashMap<Long, Day>(); 奇怪的是,当我用调用hashmap时,顺序完全是另一个,键不适合插入: for (Long name : hashMapTest.keySet()) { Window.alert(name + ": " + hashMapTest.get(name)); } 奇怪的是,当我调用hashmap时,顺序是 完全是另一
HashMap<Long, Day> hashMapTest = new HashMap<Long, Day>();
奇怪的是,当我用调用hashmap时,顺序完全是另一个,键不适合插入:
for (Long name : hashMapTest.keySet())
{
Window.alert(name + ": " + hashMapTest.get(name));
}
奇怪的是,当我调用hashmap时,顺序是
完全是另一个,并且键不适合插入:
for (Long name : hashMapTest.keySet())
{
Window.alert(name + ": " + hashMapTest.get(name));
}
不保持插入顺序,但有一种替代方法称为保持插入顺序。或者,如果您希望按自然顺序对键进行排序(使用keys compareTo方法),则可以选择。否,
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);
以下是4种常见的映射接口在Java中的实现 HashMap:键/值的插入顺序没有顺序&没有保留 LinkedHashMap:保留插入顺序 树状图:按键排序 HashTable:与HashMap不同,它是同步的
请参考示例以更好地理解。您需要什么-保持插入顺序(LinkedHashMap)或按键排序(Interface SortedMap)?这些是不同的要求。
HashMap
不进行任何排序,也不维护插入顺序。“奇怪的是……”真正奇怪的是,您没有费心检查javadocs中的HashMap
:-)
HashMap: {0=null, 1=null}
TreeMap: {0=null, 1=null}
LinkedHashMap: {1=null, 0=null}