使用自定义比较器在Java中创建排序映射

2022-09-01 23:05:47

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

示例地图:

Za,FOO
Ab,Bar

答案 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}"

请注意,这仅假定 在索引 1 处有一个字符。如果它不扔,它就会扔掉。StringStringIndexOutOfBoundsException


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

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

这个减法“技巧”通常被打破了,但它在这里工作得很好,因为两个的减法不会溢出一个。charint

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

另请参阅:


答案 2

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

您可以通过为 String 创建“包装器”类并重写 compareTo 方法轻松实现此目的