黑马程序员技术交流社区

标题: 关于Tree二叉树排序问题,为什么构造器方法优先? [打印本页]

作者: 王溢君    时间: 2013-1-21 20:32
标题: 关于Tree二叉树排序问题,为什么构造器方法优先?
我们知道二叉树的二种排序方式,一种是实现comparable接口,复写其中的compareTo方法,
  1. public int compareTo(Student s)
  2.         {
  3.                 int num = new Integer(this.age).compareTo (new Integer(s.age));
  4.                 if(num == 0)
  5.                         return this.name.compareTo(s.name);
  6.                 return num;

  7.         }
复制代码
另一种是搞一个构造器出来,实现comparator,复写其中的compare方法.
  1. public int compare(Student s1,Student s2)
  2.         {
  3.                 int num = s1.getName().compareTo(s2.getName());
  4.                 if(num == 0)
  5.                 {return new Integer(s1.getAge()).compareTo(new Integer(s2.getAge()));}
  6.                 return num;
  7.                
  8.         }
复制代码
那么当二个排序方式都存在时,为什么会优先选择构造器里的方法进行呢?

从深层原理上解释一下。先谢谢,大家也可以讨论啊。
作者: 左兆彬    时间: 2013-1-21 21:43
本帖最后由 左兆彬 于 2013-1-21 21:45 编辑

从数据结构上来讲,任意一种数据结构都是由基本数据类型和引用数据类型组成的。而基本数据类型和引用数据类型的定义中会默认调用object中的 compare方法使其本身就具有比较性。要想使数据结构具备可比性,就需要实现构造器复写其中的compare方法。而compareto方法只是在对象具备可比性的 前提下比较数据结构中的元素大小。谁更广泛一些浅而易见。个人理解,也刚看完二叉树,也不知道理解的对不对。
{:soso__4011813854091704040_4:}
作者: 高浩    时间: 2013-1-21 22:14
二叉树是一种数据结构,大于的在右侧,小于的在左侧,比较时利用到二分原理。
作者: 王溢君    时间: 2013-1-21 22:18
那么当二个排序方式都存在时,为什么会优先选择构造器里的方法进行呢?

各位看清楚问题啊。。。
作者: 黑马张旭    时间: 2013-1-22 14:18
问的好 我也有这个疑惑 答案应该涉及到数据结构吧
作者: 王溢君    时间: 2013-1-22 14:36
好是好,可是没有人解答啊。。。
作者: 谢洋    时间: 2013-1-27 00:01
个人认为,实现comparable目的让对象具有自然排序序,当自然排序不满足排序需求时,才添加比较器;所以是优先比较器的比较方式才比较合理的。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2