我有一个程序,它接受字符串中字符的实例数,然后将它们放入HashMap中。我有它工作,但我如何按字母顺序排列HashMap。这是我的代码:
import java.util.*;
import java.lang.*;
import javax.swing.JOptionPane;
import java.io.*;
public class CharacterCount
{
public static void main(String args[])
{
{
String s = JOptionPane.showInputDialog("Enter in any text.");
String str = s.replaceAll("[., ]", "");
String[] splitted = str.split("");
HashMap hm = new HashMap();
for (int i = 0; i < splitted.length; i++) {
if (!hm.containsKey(splitted[i])) {
hm.put(splitted[i], 1);
} else {
hm.put(splitted[i], (Integer) hm.get(splitted[i]) + 1);
}
}
for (Object word : hm.keySet()) {
if (word.equals("")) {
System.out.println("Spaces: " + (Integer) hm.get(word));
}
else {
System.out.println(word + ": " + (Integer) hm.get(word));
}
}
}
}
}
我需要添加什么才能使其按字母顺序/重新组织HashMap?
答案 0 :(得分:2)
默认情况下,HashMap
未排序。这是因为它的实现不能依赖于元素的顺序。
如果您需要一个有序的地图,那么您将需要查看一个TreeMap
,它提供与HashMap
相同的界面,但它根据其自然顺序(或自定义{}固有地按键排序{1}})。请注意Comparator
不允许对值进行排序,因此如果您需要按值对数据进行排序,则必须构建自己的已排序集合。
这通常是通过执行TreeMap
然后按照您的订购规则构建新的Map.Entry<K,V> entrySet()
来完成的。
答案 1 :(得分:0)
大多数地图,包括HashMap,都没有对内容顺序做出承诺。考虑SortedMap,或者并行维护哈希映射和排序列表。