微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Java put 方法调用与自身比较的目的是什么

如何解决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 举报,一经查实,本站将立刻删除。