【问题标题】:Alphabetize a HashMap of Characters按字母顺序排列字符的 HashMap
【发布时间】:2014-01-02 02:46:53
【问题描述】:

我有一个程序,它获取字符串中字符实例的数量,然后将它们放入 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。您可以将 HashMap 的条目提取到数组中并对数组进行排序,但 HashMap 的定义是无序的。
  • 查看stackoverflow.com/q/2889777/509840。如果你声明它是一个 SortedMap,它会按字母顺序排列。

标签: java string hashmap


【解决方案1】:

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

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

这通常通过获取Map.Entry&lt;K,V&gt; entrySet() 来完成,然后按照您的订购规则构建一个新的SortedSet

【讨论】:

    【解决方案2】:

    大多数地图,包括 HashMap,都不承诺内容的顺序。考虑 SortedMap,或者同时维护哈希映射和排序列表。

    Difference between HashMap, LinkedHashMap and TreeMap

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多