Java集合Comparable接口的升序、降序解释

您所在的位置:网站首页 由小到大的话 Java集合Comparable接口的升序、降序解释

Java集合Comparable接口的升序、降序解释

2024-06-25 15:11:00| 来源: 网络整理| 查看: 265

​    最近在学习集合排序问题,对于Comparable接口的compareTo()方法,什么样的表达式表示的是升序、降序呢?

​    我们用一道题来进行说明。 分别用Comparable和Comparator两个接口对下列四位同学的成绩做降序排序,如果成绩一样,那在成绩排序的基础上按照年龄由小到大排序。分别用Comparable和Comparator两个接口对下列四位同学的成绩做降序排序,如果成绩一样,那在成绩排序的基础上按照年龄由小到大排序。  

那么Comparable和Comparator两个接口有什么区别呢?

**Comparable**:强行对实现它的每个类的对象进行整体排序。这种排序被称为类的自然排序,类的compareTo方法被称为它的自然比较方法。只能在类中实现compareTo()一次,不能经常修改类的代码实现自己想要的排序。实现此接口的对象列表(和数组)可以通过Collections.sort(和Arrays.sort)进

行自动排序,对象可以用作有序映射中的键或有序集合中的元素,无需指定比较器。

**Comparator**强行对某个对象进行整体排序。可以将Comparator 传递给sort方法(如Collections.sort或 Arrays.sort),从而允许在排序顺序上实现精确控制。还可以使用Comparator来控制某些数据结构(如有序set或有序映射)的顺序,或者为那些没有自然顺序的对象collection提供排序。

一、如果我们用Comparable接口实现排序,而排序的内容要自定义时则需要重写compareTo()方法,举例:

public class compare { public static void main(String[] args) { List list = new ArrayList(); list.add(new Student("贾宝玉",14,88.5)); list.add(new Student("林黛玉",13,90.5)); list.add(new Student("史湘云",13,85)); list.add(new Student("薛宝钗",15,91)); System.out.println("以前的顺序: "); for (Student s:list) { System.out.println(s); } System.out.println("现在的顺序: "); Collections.sort(list); for (Student s:list) { System.out.println(s); } } }

输出结果:

以前的顺序:  Student{name='贾宝玉', score=88.5, age=14} Student{name='林黛玉', score=90.6, age=13} Student{name='史湘云', score=85.0, age=13} Student{name='薛宝钗', score=91.0, age=15} Student{name='凤姐', score=88.5, age=15} 用comparator重写后的顺序:  Student{name='薛宝钗', score=91.0, age=15} Student{name='林黛玉', score=90.6, age=13} Student{name='贾宝玉', score=88.5, age=14} Student{name='凤姐', score=88.5, age=15} Student{name='史湘云', score=85.0, age=13}

在这里我这样重写了compareTo()方法:

@Override public int compareTo(Student o) {     if (o.getScore() == this.getScore()){         //按年龄升序         return (this.getAge() < o.getAge()) ? -1 : (this.getAge() == o.getAge()) ? 0 : 1;     }else {         //按成绩降序         return (this.getScore() < o.getScore()) ? 1 : (this.getScore() == o.getScore()) ? 0 : -1;     } }

```

这样写是模仿了Integer里的compareTo方法的源码

public static int compare(int x, int y) {     return (x < y) ? -1 : ((x == y) ? 0 : 1); }

首先明白,若compareTo方法 return 0;则集合顺序不变;

若 return 1;集合顺序正序输出;

若 return -1;集合顺序倒序输出;

(x



【本文地址】

公司简介

联系我们

今日新闻


点击排行

实验室常用的仪器、试剂和
说到实验室常用到的东西,主要就分为仪器、试剂和耗
不用再找了,全球10大实验
01、赛默飞世尔科技(热电)Thermo Fisher Scientif
三代水柜的量产巅峰T-72坦
作者:寞寒最近,西边闹腾挺大,本来小寞以为忙完这
通风柜跟实验室通风系统有
说到通风柜跟实验室通风,不少人都纠结二者到底是不
集消毒杀菌、烘干收纳为一
厨房是家里细菌较多的地方,潮湿的环境、没有完全密
实验室设备之全钢实验台如
全钢实验台是实验室家具中较为重要的家具之一,很多

推荐新闻


图片新闻

实验室药品柜的特性有哪些
实验室药品柜是实验室家具的重要组成部分之一,主要
小学科学实验中有哪些教学
计算机 计算器 一般 打孔器 打气筒 仪器车 显微镜
实验室各种仪器原理动图讲
1.紫外分光光谱UV分析原理:吸收紫外光能量,引起分
高中化学常见仪器及实验装
1、可加热仪器:2、计量仪器:(1)仪器A的名称:量
微生物操作主要设备和器具
今天盘点一下微生物操作主要设备和器具,别嫌我啰嗦
浅谈通风柜使用基本常识
 众所周知,通风柜功能中最主要的就是排气功能。在

专题文章

    CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭