A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

我们知道二叉树的二种排序方式,一种是实现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.         }
复制代码
那么当二个排序方式都存在时,为什么会优先选择构造器里的方法进行呢?

从深层原理上解释一下。先谢谢,大家也可以讨论啊。

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

6 个回复

倒序浏览
本帖最后由 左兆彬 于 2013-1-21 21:45 编辑

从数据结构上来讲,任意一种数据结构都是由基本数据类型和引用数据类型组成的。而基本数据类型和引用数据类型的定义中会默认调用object中的 compare方法使其本身就具有比较性。要想使数据结构具备可比性,就需要实现构造器复写其中的compare方法。而compareto方法只是在对象具备可比性的 前提下比较数据结构中的元素大小。谁更广泛一些浅而易见。个人理解,也刚看完二叉树,也不知道理解的对不对。
{:soso__4011813854091704040_4:}

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

回复 使用道具 举报
二叉树是一种数据结构,大于的在右侧,小于的在左侧,比较时利用到二分原理。
回复 使用道具 举报
那么当二个排序方式都存在时,为什么会优先选择构造器里的方法进行呢?

各位看清楚问题啊。。。
回复 使用道具 举报
问的好 我也有这个疑惑 答案应该涉及到数据结构吧
回复 使用道具 举报
王溢君 来自手机 中级黑马 2013-1-22 14:36:39
地板
好是好,可是没有人解答啊。。。
回复 使用道具 举报
谢洋 高级黑马 2013-1-27 00:01:14
7#
个人认为,实现comparable目的让对象具有自然排序序,当自然排序不满足排序需求时,才添加比较器;所以是优先比较器的比较方式才比较合理的。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马