我们都知道如果想向TreeSet或者TreeMap中存入多个自定义对象时,如果该自定义对象不具有可比性,
那么是会报错的,因此我们需要让对象实现Comparable接口,复写compareTo方法,但是我们也发现
那个错误是发生在第二次插入元素时,而不是第一次,这是否意味着第一次添加元素时是不会调用对象
的compareTo方法的,也不在乎对象是否具有可比性的呢?因为此时二叉树中不存在其他元素,所以
这种现象也是可以理解的,既然没有其他元素,那么就不需要比较,这也是我原本的想法,直到我学到
Map的时候无意发现的一个问题,如下:
- Map<Student,String> map=new TreeMap<Student,String>(new MyComp());
- map.put(new Student("abb",22),"北京");
复制代码
该代码只添加了一个元素到TreeMap中,我在比较器的compare(或者使用自定义对象的compareTo方法)方法中打印两个互相比较的对象,
主要用于观察调用了几次compare方法,运行图如下:
我们可以看到打印了两次:姓名:abb 年龄:22........姓名:abb 年龄:22..........0
这就代表着调用了两次compare方法,这是我不能理解的,而且根据观察发现,两次
都是拿仅有的一个元素自身跟自身在比较,这是为什么呢?这样比较目的是什么
同时最后遍历TreeMap也能确定确实只有一个元素
求大神指点。。。。。 |