java - 按字母顺序排列字符的 HashMap

标签 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?

最佳答案

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

如果您需要排序的 map ,那么您将不得不查看 TreeMap 它提供与 HashMap 相同的接口(interface)但它本质上是根据键的自然顺序(或自定义 Comparator )进行排序的。请注意TreeMap不允许对值进行排序,因此如果您需要按值对数据进行排序,那么您将必须构建自己的排序集合。

这通常是通过获取 Map.Entry<K,V> entrySet() 来完成的然后建立一个新的SortedSet遵循您的订购规则。

关于java - 按字母顺序排列字符的 HashMap,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20875578/

相关文章:

java - Core Java 中的 OGNL 表达式 - 使用动态键访问 Map

Java类文件到其他格式的转换,有多少种

java - java中要求用户输入不带空格的字符串

python - 有没有更好的方法来交换没有占位符的字符串

java - for 循环不迭代我的 HashMap 键集

java - 为什么我们在Java中使用静态 block ?为什么我们不能用简单的语句来代替它呢?

java - Spring boot + gradle 将命令行参数传递给 application.property

c# - 如果包含句点(.),如何拆分字符串?

java - 为什么HashSet或HashMap不支持基于位置的访问?然而,这些类还将对象存储在 Enter 类型的数组中

java - 我可以声明一个具有等效字符串的整数吗?