如何给一个对象排序

 我来答
休究绍B
2022-09-30 · TA获得超过6404个赞
知道大有可为答主
回答量:6551
采纳率:100%
帮助的人:314万
展开全部

  当我们排序的对象不止是简单的数据类型的时候

  我们可以通过 实现Comparable 和Comparator 接口来完整对 对象的排序

  Comparable和Compartor 的区别?

  Comparable 是一个自身已经支持自比较的(如String Integer) 的接口

  Comparator 可以说是一个 专用的比较器 当对象本身 不支持自排序和自比较函数的时候

  我们可以通过实现Compartor 来比较两对象的大小

  Comparable 是一个比较通用的接口 用户可以通过他实现 排序功能

  而 Comparator 可以看作一种算法 一种设计模式 (可以看作是一个策略模式 就是不改变对象自身 而用一个策略对象改变对象行为)

  Comparable 相对比较固定 与具体类绑定

  Comparator 比较灵活 可以与任何需要实现功能的类 绑定

  Comparable 可以说是 静态绑定

  Comparator 可以说是动态绑定

  Comparable

  此接口强行对实现它的每个类的对象进行整体排序 此排序被称为该类的自然排序 类的 pareTo 方法被称为它的自然比较方法

  实现此接口的对象列表(和数组)可以通过 Collections sort(和 Arrays sort)进行自动排序 实现此接口的对象可以用作有序映射表中的键或有序集合中的元素 无需指定比较器

  对于类 C 的每一个 e 和 e 来说 当且仅当 (pareTo((Object)e ) == ) 与 e equals((Object)e ) 具有相同的布尔值时 类 C 的自然排序才叫做与 equals 一致 注意 null 不是任何类的实例 即使 e equals(null) 返回 false pareTo(null) 也会抛出 NullPointerException

  强烈推荐(虽然不是必需的)使自然排序与 equals 一致 这是因为在使用其自然排序与 equals 不一致的元素(或键)时 没有显式比较器的有序集合(和有序映射表)行为表现 怪异 尤其是 这样的有序集合(或有序映射表)违背了根据 equals 方法定义的集合(或映射表)的常规协定

  而 Comparator

  比较函数强行对某些对象 collection 进行整体排序 可以将 Comparator 传递给 sort 方法(如 Collections sort) 从而允许在排序顺序上实现精确控制 还可以使用 Comparator 来控制某些数据结构(如 TreeSet 或 TreeMap)的顺序

  当且仅当对于一组元素 S 中的每个 e 和 e 而言 (pare((Object)e (Object)e )== ) 与 e equals((Object)e ) 具有相等的布尔值时 Comparator c 强行对 S 进行的排序才叫做与等号一致 的排序

lishixinzhi/Article/program/Java/hx/201311/26524

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式