package java_practice;
import java.util.Collection;
import java.util.Comparator;
import java.util.Set;
import java.util.TreeMap;
public class TreeMapDemo {
public static TreeMap<String,Integer> tm;
public static void main(String[] args) {
//Comparator comparator;
tm = new TreeMap(new TreeMapCompare());
tm.put("lqx",12);
tm.put("fqy",16);
tm.put("znk",10);
tm.put("jgdabc",20);
}
public static class TreeMapCompare implements Comparator<String>{
@Override
public int compare(String key1, String key2) {
Integer v1 = tm.get(key1);
Integer v2 = tm.get(key2);
return v1.compareTo(v2 )==0?
key1.compareTo(key2) //如果value相等则比较key
:
v1.compareTo(v2 ); //如果value不等则按照value比较
}
}
}
兄弟,我在你上一个问题给你回复了
package org.jshand.itextpdf;
import java.util.Comparator;
import java.util.HashMap;
import java.util.TreeMap;
/**
* 项目:commons
* 创建时间: 2022-02-14 16:12
* 作者 :金山
* 描述 :
*/
public class TreeMapCompareDemo {
/**
* 全局map,便于比较器中使用
*/
public static void main(String[] args) {
Comparator comparator;
HashMap<String,Integer> baseMap = new HashMap();
baseMap.put("lqx",12);
baseMap.put("fqy",16);
baseMap.put("znk",10);
baseMap.put("aa",15);
baseMap.put("bb",15);
baseMap.put("cc",20);
baseMap.put("dd",20);
baseMap.put("jgdabc",20);
TreeMap tm = new TreeMap(new TreeMapCompare(baseMap));
tm.putAll(baseMap);
System.out.println(tm);
}
static class TreeMapCompare implements Comparator<String>{
private HashMap<String,Integer> baseMap = null;
public TreeMapCompare(HashMap baseMap) {
this.baseMap = baseMap;
}
@Override
public int compare(String key1, String key2) {
Integer v1 = baseMap.get(key1);
Integer v2 = baseMap.get(key2);
return v1.compareTo(v2 )==0?
key1.compareTo(key2) //如果value相等则比较key
:
v1.compareTo(v2 ); //如果value不等则按照value比较
}
}
}
28行时因为11行静态对象没有赋值,所以程序加载的时候默认赋值为null,然后你用tm这个为null值的对象调用方法肯定就会报空指针。
建议:在11行的静态对象手动new对象赋值,防止空指针异常。public static TreeMap<String,Integer> tm== new TreeMap(new TreeMapCompare())
很明显是空指针异常了