import java.util.Comparator; import java.util.TreeMap; /** * @author hxh * @version 1.0 * @date 2019/3/21 15:11 */ public class TreeMapTest { public static void main(String[] args) { TreeMap<Long,Integer> map1 = new TreeMap<Long,Integer>(); //默认的TreeMap升序排列 TreeMap<Long,Integer> map2= new TreeMap<Long,Integer>(new Comparator<Long>(){ /* * int compare(Object o1, Object o2) 返回一个基本类型的整型, * 返回负数表示:o1 小于o2, * 返回0 表示:o1和o2相等, * 返回正数表示:o1大于o2。 */ public int compare(Long a,Long b){ return (int) (b-a); } }); map2.put(1L,2); map2.put(2L,4); map2.put(7L, 1); map2.put(5L,2); System.out.println("Map2="+map2); map1.put(1L,2); map1.put(2L,4); map1.put(7L, 1); map1.put(5L,2); System.out.println("map1="+map1); } }
如果TreeMap的key是Long类型的时候,比较器public int compare(Long a,Long b){ return (int) (b-a); } b-a有可能还是Long类型的值,这个时候比较器会失灵,导致整个treeMap getKey(XXXL)获取不到value
解决办法:
用Java集合自带的比较器,
TreeMap<Long, List<Map>> doDetailListMap = new TreeMap<>(Comparator.reverseOrder());
就能解决上述问题。