如何根据原始输入对 hashtable/enumeration 进行排序
How to sort hashtable/enumeration based on original input
我创建了一个字典来输出哈希表的键。
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
我希望输出按照我放入的原始顺序列出(艾玛、汤姆、基努),但它打印出这个甚至不是字母顺序的随机顺序。请帮助我了解发生这种情况的方式和原因,以及如何解决问题
用Hashtable 放在另一个hashtable 中,其中int 是顺序,string 是键。然后将哈希表放在更大的哈希表中,这样哈希表就是 <, String>
您应该使用 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);
这将按照键插入地图的顺序输出键。
顺便说一句,Dictionary
、Hashtable
和相关的 类 非常古老,已被 Map
及其实现所取代。
了解 hashCode 和 equals。哈希集合几乎总是包含随机顺序的元素(可能没有像 LinkedHashSet 或 LinkedHashMap 这样保持输入顺序的东西,但这是另外一回事)。它们可以更快地从任何位置获取元素。在你的问题中,我认为你可以将你的字符串包装到新的 class 中,比如 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());
}
}
我创建了一个字典来输出哈希表的键。
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
我希望输出按照我放入的原始顺序列出(艾玛、汤姆、基努),但它打印出这个甚至不是字母顺序的随机顺序。请帮助我了解发生这种情况的方式和原因,以及如何解决问题
用Hashtable
您应该使用 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);
这将按照键插入地图的顺序输出键。
顺便说一句,Dictionary
、Hashtable
和相关的 类 非常古老,已被 Map
及其实现所取代。
了解 hashCode 和 equals。哈希集合几乎总是包含随机顺序的元素(可能没有像 LinkedHashSet 或 LinkedHashMap 这样保持输入顺序的东西,但这是另外一回事)。它们可以更快地从任何位置获取元素。在你的问题中,我认为你可以将你的字符串包装到新的 class 中,比如 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());
}
}