Java 哈希表是否保持插入顺序?

Java 哈希表是否保持插入顺序?,java,collections,dictionary,hashtable,Java,Collections,Dictionary,Hashtable,下面的代码以相同的插入顺序提供了输出。我读了javadoc,他们甚至没有讨论插入顺序。有人能帮我得到正确的信息吗 import java.util.*; public class hash { public static void main(String[] args) { String str[] = { "japan", "usa", "japan", "russia", "usa"

下面的代码以相同的插入顺序提供了输出。我读了javadoc,他们甚至没有讨论插入顺序。有人能帮我得到正确的信息吗

import java.util.*;

public class hash {

public static void main(String[] args) {

    String str[] = { "japan",
            "usa",
            "japan",
            "russia",
            "usa",
            "japan",
            "japan",
            "australia"};
    int len = 8;
    Hashtable ht = new Hashtable();
    int i = 0;
    while (i < len) {

        String c = str[i];
        System.out.println("c :" + c);
        Integer intg = (Integer) ht.get(c);

        if (intg == null)
            ht.put(c, new Integer(1));
        else
            ht.put(c, new Integer(intg.intValue() + 1));

        i++;
    }

    Enumeration k = ht.keys();

    while (k.hasMoreElements()) {
        String key = (String) k.nextElement();
        System.out.println(key + " > " + ht.get(key));
    }
}
}
import java.util.*;
公共类散列{
公共静态void main(字符串[]args){
字符串str[]={“日本”,
“美国”,
“日本”,
“俄罗斯”,
“美国”,
“日本”,
“日本”,
“澳大利亚”};
int len=8;
Hashtable ht=新的Hashtable();
int i=0;
而(我”+ht.get(key));
}
}
}

不,它没有。它只知道“散列”顺序。如果您对字符串重新排序,您会发现它们在哈希表中仍然以相同的顺序出现。

不,不是这样。要保留插入顺序,请使用
java.util.LinkedHashMap
()


另外,
HashMap
现在比
Hashtable
更受欢迎,因为
Hashtable
具有不必要的并发开销。(请参阅。)

哈希表用于快速查找,而不是维护顺序。您应该查看MapJavadoc中的
LinkedHashMap
或其他数据结构

映射的顺序定义为映射集合视图上的迭代器返回其元素的顺序。一些map实现,比如TreeMap类,对它们的顺序做出了特定的保证;其他类,如HashMap类,则没有


查看Hashtable和HashMap的代码也非常有用。

LinkedHashMap用于维护插入元素的顺序。。Hashtable类似于HashMap,但它不允许空键或空值,而HashMap允许一个空键和几个空值…

“如果对字符串重新排序,您会发现它们仍然以与Hashtable相同的顺序出现”-不总是真的。如果存在冲突,则哈希表顺序将取决于键插入顺序。因此,尝试重新排序可能会改变哈希表的顺序,尽管不是以您想要的方式。正确。我只是想说,对这些特定字符串进行简单的重新排序,就可以得到相同的输出。LinkedHasMap是一个非常好的实现,当我们还需要hashmap中的排序时。我试图寻找一个好的设计或相同的伪代码,但没有找到任何。如果您知道任何链接,请分享。