java—如何根据原始输入对哈希表/枚举进行排序

q0qdq0h2  于 2021-06-27  发布在  Java
关注(0)|答案(3)|浏览(362)

我创建了一个字典来输出哈希表的键。

import java.util.Dictionary;
import java.util.Enumeration;
import java.util.Hashtable;

public class Foo {
    public static void main (String [] args) {
         Dictionary<String, String> dict = new Hashtable<String, String>();
         dict.put("Emma", "Watson");
         dict.put("Tom", "Hanks");
         dict.put("Keanu", "Reeves");

         Enumeration<String> emu = dict.keys();

         while (emu.hasMoreElements()) {
              System.out.println(emu.nextElement());
         }
    }
}

输出:

Keanu
Emma
Tom

我希望输出被列为原始顺序,我把它在(艾玛,汤姆,基努),但它打印出这个随机顺序,甚至不alphebetical。请帮助我了解这是如何发生的,为什么会发生,以及如何解决问题

6jjcrrmo

6jjcrrmo1#

你应该使用 LinkedHashMap<> ,它结合了一个哈希Map以进行快速访问,但也保持元素按插入顺序排序。例如

Map<String,String> dict = new LinkedHashMap<>();
dict.put("Emma", "Watson");
dict.put("Tom", "Hanks");
dict.put("Keanu", "Reeves");

for (String s : dict.keySet())
    System.out.println(s);

这将按键插入Map的顺序输出键。
顺便说一句, Dictionary , Hashtable 相关的课程非常古老,被 Map 以及它的实现。

thtygnil

thtygnil2#

将它放入另一个具有hashtable<int,string>的哈希表中,其中int是顺序,string是键。然后将哈希表放入较大的哈希表中,使哈希表为<int,string>,string>

svgewumm

svgewumm3#

阅读hashcode和equals。散列集合几乎总是以随机顺序包含元素(可能没有像linkedhashset或linkedhashmap这样保持输入顺序的东西,但这是另一回事)。它们能更快地从任何位置获取元素。在您的问题中,我认为您可以将字符串 Package 成新的类,比如name,并使用comparator或comparable接口对它们进行排序。或者只需将dictionary更改为hashtable并获取entryset:

public static void main (String [] args) {
    Hashtable<String, String> dict = new Hashtable<>();
    dict.put("Emma", "Watson");
    dict.put("Tom", "Hanks");
    dict.put("Keanu", "Reeves");

    for (Map.Entry<String, String> s : dict.entrySet()) {
        //ordered by entry
        System.out.println(s.getKey());
    }
}

相关问题