【问题标题】:Create a SortedMap in Java with a custom Comparator使用自定义比较器在 Java 中创建 SortedMap
【发布时间】:2011-02-14 11:37:16
【问题描述】:

我想在 Java 中创建一个具有自定义排序顺序的 TreeMap。排序后的键是字符串,需要根据第二个字符进行排序。值也是字符串。

示例地图:

Za,FOO
Ab,Bar

【问题讨论】:

  • A TreeMap 不使用 hashCode()。 “排序哈希”是什么意思?你的意思是说SortedMap<K,V>
  • @kunjaan - 在 Java 术语中,关联数组被称为“映射”而不是“哈希”......尤其是当您谈论不使用哈希的 Map 类型时!

标签: java string sorting comparator treemap


【解决方案1】:

您可以像这样使用自定义比较器:

    Comparator<String> secondCharComparator = new Comparator<String>() {
        @Override public int compare(String s1, String s2) {
            return s1.substring(1, 2).compareTo(s2.substring(1, 2));
        }           
    };

示例:

    SortedMap<String,String> map =
        new TreeMap<String,String>(secondCharComparator);
    map.put("Za", "FOO");
    map.put("Ab", "BAR");
    map.put("00", "ZERO");
    System.out.println(map); // prints "{00=ZERO, Za=FOO, Ab=BAR}"

请注意,这只是假设 String 在索引 1 处有一个字符。如果没有,它会抛出 StringIndexOutOfBoundsException


或者,您也可以使用这种比较:

return s1.charAt(1) - s2.charAt(1);

这个减法“技巧”通常被破坏,但在这里它工作正常,因为两个char的减法不会溢出int

不过,上面的substringcompareTo 解决方案更具可读性。

另见:

【讨论】:

    【解决方案2】:

    假设您不是指哈希函数或排序中的哈希...

    您可以通过为 String 创建一个“包装”类并覆盖 compareTo 方法来轻松完成此操作

    【讨论】:

      猜你喜欢
      • 2016-12-30
      • 2020-03-08
      • 2018-04-15
      • 2018-12-22
      • 2018-10-31
      • 1970-01-01
      • 1970-01-01
      • 2021-09-23
      • 1970-01-01
      相关资源
      最近更新 更多