Java:首次添加调用时触发的TreeSet compareTo方法
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Java:首次添加调用时触发的TreeSet compareTo方法,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1267字,纯文字阅读大概需要2分钟。
内容图文
![Java:首次添加调用时触发的TreeSet compareTo方法](/upload/InfoBanner/zyjiaocheng/659/8da6d75662fc4211a14d0a035fcb44d0.jpg)
以下Java代码利用TreeSet收集从类MyClass派生的对象,该类未实现Comparable接口,也没有compareTo()方法来执行对象之间的比较.通过不提供该比较方法,我们希望在添加第二个对象(而不是第一个对象)的过程中引发异常,因为只有一个对象的比较不明确.
JDK:1.7
题:
为什么在第一个添加tree.add(m1)上触发compareTo()?
码:
package javaapplication1;
import java.util.*;
class MyClass
{
int _x;
MyClass(int x)
{
_x = x;
}
}
public class JavaApplication1
{
public static void main(String[] args)
{
MyClass m1 = new MyClass(5);
MyClass m2 = new MyClass(3);
TreeSet tree = new TreeSet();
tree.add(m1);
tree.add(m2);
}
}
解决方法:
TreeSet在TreeMap的顶部实现.因此TreeSet.add()调用TreeMap.put(Object,Object)方法.请参阅以下内容:
public V put(K key, V value) {
Entry<K,V> t = root;
if (t == null) {
compare(key, key); //this is the culprit
root = new Entry<>(key, value, null);
size = 1;
modCount++;
return null;
}
……………
……………
……………
}
现在,因为根为空,所以流程将进入if(t == null){因此调用compare(key,key).
final int compare(Object k1, Object k2) {
return comparator==null ? ((Comparable<? super K>)k1).compareTo((K)k2)
: comparator.compare((K)k1, (K)k2);
}
在compare方法内部,它是类型转换k1,k2 Comparable,并且您的类未实现Comparable,因此出现以下异常:
Exception in thread "main" java.lang.ClassCastException:
.
此代码根据JDK 1.7.
内容总结
以上是互联网集市为您收集整理的Java:首次添加调用时触发的TreeSet compareTo方法全部内容,希望文章能够帮你解决Java:首次添加调用时触发的TreeSet compareTo方法所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。