Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/398.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Hashmap是否自动排序?_Java_Date_Hashmap - Fatal编程技术网

Java 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:

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}