23

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

示例地图:

Za,FOO
Ab,Bar
4

2 回答 2

35

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

    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.

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

也可以看看:

于 2010-05-01T04:03:51.650 回答
0

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

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

于 2010-05-01T05:34:29.950 回答