按字母顺序排列字符的HashMap

时间:2014-01-02 02:46:54

标签: java string hashmap

我有一个程序,它接受字符串中字符的实例数,然后将它们放入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?

2 个答案:

答案 0 :(得分:2)

默认情况下,HashMap未排序。这是因为它的实现不能依赖于元素的顺序。

如果您需要一个有序的地图,那么您将需要查看一个TreeMap,它提供与HashMap相同的界面,但它根据其自然顺序(或自定义{}固有地按键排序{1}})。请注意Comparator不允许对值进行排序,因此如果您需要按值对数据进行排序,则必须构建自己的已排序集合。

这通常是通过执行TreeMap然后按照您的订购规则构建新的Map.Entry<K,V> entrySet()来完成的。

答案 1 :(得分:0)

大多数地图,包括HashMap,都没有对内容顺序做出承诺。考虑SortedMap,或者并行维护哈希映射和排序列表。

Difference between HashMap, LinkedHashMap and TreeMap