如何解决Java put 方法调用与自身比较的目的是什么
我在看TreeMap的java源代码,对于put方法,当map为空时,它仍然调用与自己比较键,这样做的目的是什么? '''
public V put(K key,V value) {
TreeMap.Entry<K,V> t = this.root;
if (t == null) {
this.compare(key,key);
this.root = new TreeMap.Entry(key,value,(TreeMap.Entry)null);
this.size = 1;
++this.modCount;
return null;
}
'''
解决方法
检查。
具体来说,compare
方法将在比较器中同时抛出第一个和第二个参数(在这种情况下,它是同一件事),如果它被定义了。在这种情况下,如果比较器出现问题(例如,您提供给 TreeMap 的比较器旨在比较字符串,但它是一个整数映射 - 请记住,TreeMap 早于泛型,有不保证 key
是正确的类型) - 那么现在会抛出异常。
这是一件好事 - 您希望异常尽早发生。
即使没有定义比较器(即您按照自然排序顺序进行),这也会将 key
强制转换为 Comparable
,如果它没有实现方法。
最后,如果您尝试将 null
添加到树形图中而比较器不喜欢它(或者它是无比较器的 TreeMap),那么您会得到一个 NPE。
TL;DR:compare()
调用要么什么也不做,要么抛出异常,重点是:尽早抛出。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。