微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

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

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

我希望将输出列为我放入它的原始顺序(emma、Tom、Keanu),但它打印出这个甚至不是字母的随机顺序。请帮助我了解发生这种情况的方式和原因,以及如何解决问题

解决方法

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

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);

这将按照键插入映射的顺序输出键。

顺便说一句,DictionaryHashtable 和相关类非常古老,已被 Map 及其实现所取代。

,

阅读有关 hashCode 和 equals 的信息。哈希集合几乎总是包含随机顺序的元素(也许没有像 LinkedHashSet 或 LinkedHashMap 这样的东西,它们保持输入顺序,但这是别的东西)。他们可以更快地从任何位置获取元素。在你的问题中,我认为你可以将你的字符串包装到像 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());
    }
} 
,

把它放在另一个带有Hashtable 的哈希表中,其中int是顺序,字符串是键。然后将哈希表放入更大的哈希表中,使哈希表为,String>

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。