java - 基于键的Map排序

标签 java hashmap hashtable

这基本上不是如何根据键对 HashMap 进行排序。为此,我可以毫不费力地直接使用 TreeMap :)

我现在有的是

Map<String, Object> favoritesMap = new HashMap<String, Object>();
and its contents can be
["Wednesdays" : "abcd"]
["Mondays" : "1234"]
["Not Categorized" : "pqrs"]
["Tuesdays" : "5678"]

我想根据键对 HashMap 进行排序,除此之外,我需要“未分类”作为最后一个检索。

因此在遍历 keySet 时预期是

["Mondays", "Tuesdays", "Wednesdays", "Not Categorized"] i.e. sorted on keys and "Not Categorized" is the last one

想在创建时使用 HashMap 并在最后添加 ["Not Categorized": "pqrs"]HashMap 没有保证订单:)

解决方案的任何其他指示?

最佳答案

您是否出于某些外部原因专门排除了 TreeMap?如果不是,您显然可以将 TreeMap 与特制的 Comparator 一起使用。

您是否考虑过任何其他 SortedMap

如果 TreeMap 确实不可用,我会扩展 HashMap 并使其看起来总是有一个条目,但这当然不是一项微不足道的工作。在走这条路之前,您应该有充分的理由不使用 SortedMap

已添加

下面是一个示例,说明如何使用 TreeMap 使特定条目始终排序到末尾:

// This key should always appear at the end of the list.
public static final String AtEnd = "Always at the end";

// A sample map.
SortedMap<String, String> myMap =
        new TreeMap<>(
        new Comparator<String>() {
          @Override
          public int compare(String o1, String o2) {
            return o1.equals(AtEnd) ? 1 : o2.equals(AtEnd) ? -1 : o1.compareTo(o2);
          }
        });

private void test() {
  myMap.put("Monday", "abc");
  myMap.put("Tuesday", "def");
  myMap.put("Wednesday", "ghi");
  myMap.put(AtEnd, "XYZ");

  System.out.println("myMap: "+myMap);
  // {Monday=abc, Tuesday=def, Wednesday=ghi, Always at the end=XYZ}
}

我想知道您是否正在寻找它的一些变体?

关于java - 基于键的Map排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14623379/

相关文章:

java - 使用Jmeter类进行编码

java - 遍历/更新 HashMap

java - 如何从 map 对象获取列表值

java - 我可以将数组复制到哈希表吗?

c - 有没有办法在C中通过超过1层的多态数据结构传递函数指针

java - 从 Java 中的 jpa 注释更改表

java - 更改面板的大小

java - 在 Oracle 12c 上插入/检索阿拉伯语数据

java - 通过 YML 文件将 map 中的符号和特殊字符作为键

java - 具有两种 O(1) 查找方式的数据结构。哈希表?