Java对象的比较和排序(Comparator和Comparable)

简介: Java对象的比较和排序(Comparator和Comparable)

Java对象的比较和排序(Comparator和Comparable)  

我们都知道,数字之间很容易比较大小,那对象之间怎么比较大小呢?小声点...我来跟你们讲,在Java里面,实现Comparator和Comparable这两个接口,可以实现对对象比较大小。但是这两者之间又有什么区别呢?

comparator

image.png

1、这个接口类在java.util包里面,实现接口时需要导入该包。

2、一般新建一个类实现这个接口,用来比较其他对象的大小。实现这个接口时,对象不能把自己和其他对象相比较。

3、实现public int compare(Object o1, Object o2)

当实现类使用了泛型时,Object可以换成具体的类型。


comparable


1、接口类在java.lang包里面,实现接口时无需导包。

2、一般是需要比较大小的类直接实现这个接口,因为实现这个接口时,支持自己直接和另一个对象比较大小。

3、实现public int compareTo(Object o)

方法,当实现类使用了泛型时,Object也可以换成具体的类型。

代码如下:

image.png

两者两同点

image.png

       两者所实现的函数的返回值一样,都是int类型的。另外注意一点当要对一堆对象按照某个属性进行比较大小排序时,返回值不同,会影响排序的顺序。例如本文中的,如果按照年龄的大小对Student进行排序时,如果按照从大到小的顺序进行排序时,compare的实现方法如下,代码见上面的图片:

1、前者大于被后者(也就是compare方法里面的对象),那么返回负整数

2、前者等于被后者,那么返回0

3、前者小于被后者,那么返回正整数

       如果按照从小到大的顺序进行排序时,只需把1和3中的返回值互换。

实现排序的主函数如下所示:


image.png最后提醒一下,特别特别注意两点:

1、集合转化成数组,数组的大小需要和集合的长度保持一致,如果数组过长,数组后面的值会被自动赋值null,在对数组进行排序时抛出NullPointerException

2、调用工具类Arrays里面的sort方法可以对数组排序,如果数组存放的是对象等复杂类型,需要对象实现comparable的compareTo方法

最后皮一下


现在把三个学生对象添加到集合list中,

1、把list赋值给集合copyList,

2、list转数组返回数组1,

3、通过for循环赋值给数组2,

       现在对list集合进行排序操作,请问集合copyList和两个数组中的数据是否也把顺序排好了呢?


部分代码如下:

image.png

目录
相关文章
C4.
|
1月前
|
缓存 Java
Java的Integer对象
Java的Integer对象
C4.
13 0
|
29天前
|
Java
java8中List对象转另一个List对象
java8中List对象转另一个List对象
39 0
|
4天前
|
设计模式 JavaScript Java
[设计模式Java实现附plantuml源码~行为型] 对象状态及其转换——状态模式
[设计模式Java实现附plantuml源码~行为型] 对象状态及其转换——状态模式
|
6天前
|
Java
Java基础之对象的引用
Java基础之对象的引用
6 0
|
10天前
|
Java
Java中如何克隆一个对象?
【4月更文挑战第13天】
15 0
|
11天前
|
Java API 数据库
深入解析:使用JPA进行Java对象关系映射的实践与应用
【4月更文挑战第17天】Java Persistence API (JPA) 是Java EE中的ORM规范,简化数据库操作,让开发者以面向对象方式处理数据,提高效率和代码可读性。它定义了Java对象与数据库表的映射,通过@Entity等注解标记实体类,如User类映射到users表。JPA提供持久化上下文和EntityManager,管理对象生命周期,支持Criteria API和JPQL进行数据库查询。同时,JPA包含事务管理功能,保证数据一致性。使用JPA能降低开发复杂性,但需根据项目需求灵活应用,结合框架如Spring Data JPA,进一步提升开发便捷性。
|
16天前
|
存储 Java 编译器
对象的交响曲:深入理解Java面向对象的绝妙之处
对象的交响曲:深入理解Java面向对象的绝妙之处
47 0
对象的交响曲:深入理解Java面向对象的绝妙之处
|
21天前
|
Java
在Java中,多态性允许不同类的对象对同一消息做出响应
【4月更文挑战第7天】在Java中,多态性允许不同类的对象对同一消息做出响应
17 2
|
29天前
|
Java
Java常用封装Base对象
Java常用封装Base对象
8 0
|
1月前
|
Java
【Java】通过Comparator比较器的方式给对象数组排序
【Java】通过Comparator比较器的方式给对象数组排序
11 0