我想TreeMap
用自定义排序顺序在 Java 中创建一个。排序后的键是字符串,需要根据第二个字符进行排序。这些值也是字符串。
示例地图:
Za,FOO
Ab,Bar
我想TreeMap
用自定义排序顺序在 Java 中创建一个。排序后的键是字符串,需要根据第二个字符进行排序。这些值也是字符串。
示例地图:
Za,FOO
Ab,Bar
您可以使用这样的自定义比较器:
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
.
不过,上面的substring
andcompareTo
解决方案更具可读性。
假设您不是指哈希函数或排序中的哈希...
您可以通过为 String 创建一个“包装器”类并覆盖 compareTo 方法来轻松完成此操作