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