java – 使TreeMap Comparator容忍null
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – 使TreeMap Comparator容忍null,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1912字,纯文字阅读大概需要3分钟。
内容图文
![java – 使TreeMap Comparator容忍null](/upload/InfoBanner/zyjiaocheng/815/bc45630fc3644309a1422192493eae1b.jpg)
这个定制的Valuecomparator按其值对TreeMap进行排序.但是在搜索TreeMap是否具有某个键时,它不会容忍nullpointexception.如何修改比较器来处理nullpoint?
import java.io.IOException;
import java.util.Comparator;
import java.util.HashMap;
import java.util.Map;
import java.util.TreeMap;
public class TestTreeMap {
public static class ValueComparator<T> implements Comparator<Object> {
Map<T, Double> base;
public ValueComparator(Map<T, Double> base) {
this.base = base;
}
@Override
public int compare(Object a, Object b) {
/*if (((Double) base.get(a) == null) || ((Double) base.get(b) == null)){
return -1;
} */
if ((Double) base.get(a) < (Double) base.get(b)) {
return 1;
} else if ((Double) base.get(a) == (Double) base.get(b)) {
return 0;
} else {
return -1;
}
}
}
public static void main(String[] args) throws IOException {
Map<String, Double> tm = new HashMap<String, Double>();
tm.put("John Doe", new Double(3434.34));
tm.put("Tom Smith", new Double(123.22));
tm.put("Jane Baker", new Double(1378.00));
tm.put("Todd Hall", new Double(99.22));
tm.put("Ralph Smith", new Double(-19.08));
ValueComparator<String> vc = new ValueComparator<String>(tm);
TreeMap<String, Double> sortedTm =
new TreeMap<String, Double>(vc);
sortedTm.putAll(tm);
System.out.println(sortedTm.keySet());
System.out.println(sortedTm.containsKey("John Doe"));
// The comparator doesn't tolerate null!!!
System.out.println(!sortedTm.containsKey("Doe"));
}
}
解决方法:
这不是航天科技 …
将其插入已注释掉的代码中:
if (a == null) {
return b == null ? 0 : -1;
} else if (b == null) {
return 1;
} else
这将null视为比任何非null Double实例更小的值.
您的版本不正确:
if ((a==null) || (b==null)) {return -1;}
这表示“如果a为null或b为null,则a小于b”.
这会导致虚假的关系
null < 1.0 AND 1.0 < null
null < null
当set / map中存在空值时,这种事情导致树不变量中断,并导致不一致和不稳定的键排序……更糟糕的是.
有效比较方法的要求在javadocs中列出.数学版本是该方法必须在所有可能输入值的域上定义total order.
内容总结
以上是互联网集市为您收集整理的java – 使TreeMap Comparator容忍null全部内容,希望文章能够帮你解决java – 使TreeMap Comparator容忍null所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。