使用自定义Comparator在Java中创建SortedMap

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

示例地图:

 Za,FOO Ab,Bar 

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

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

样品:

  SortedMap map = new TreeMap(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解决方案更具可读性。

也可以看看:

  • Java Integer:什么是更快的比较或减法?

假设你并不是指散列函数或排序中的Hash ……

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