Java Comparable和Comparator(1)

简介: Java Comparable和Comparator

Java中在进行数据排序时,Comparable和Comparator必不可少会遇得到,普通的String、Integer等类型,已经实现了Comparable接口,而有些时候,我们需要对一些其他不存在内在排序关系的类进行排序,那么就需要实现以上两个接口,但是会有所不同。


之前搜索两者的关系,看到这样一篇文章,Comparable与Comparator的区别,里面有些说法有点太深奥,不过我来总结的话,两者最大的区别就在于如果实现Comparable,就意味着类的排序规则固定了,而如果实现Comparator,类本身是没有排序规则的,只是通过制定外部规则使其进行排序,排序规则你可以指定很多类型。


那么就且来看看我做的一个例子,我们新建一个美女类(BeautyGirl),使其具有年龄(age)、身高(height)属性,姑且按照年龄优先于身高的原则来进行排序,那么实现方式就有下面的方式。


Comparable

package com.mwq.comparable;
public class BeautyGirl implements Comparable<BeautyGirl> {
    private int age;
    private Double height;
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public Double getHeight() {
        return height;
    }
    public void setHeight(Double height) {
        this.height = height;
    }
    @Override
    public int compareTo(BeautyGirl girl) {
        if (this.getAge() == girl.getAge()) {
            return compareHeight(girl);
        } else {
            return this.getAge() - girl.getAge();
        }
    }
    private int compareHeight(BeautyGirl girl) {
        return girl.getHeight().compareTo(this.getHeight());
    }
    @Override
    public String toString() {
        return "美女{年龄:" + this.getAge() + "身高:" + this.getHeight() + "}";
    }
}

实现comparable接口,就意味着需要在美女类中实现compareTo方法,也就是说,该类在排序的时候必须是年龄优先于身高。


来看看测试类

package com.mwq.comparable;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class Test {
    public static void main(String[] args) {
        List<BeautyGirl> girls = new ArrayList<BeautyGirl>();
        BeautyGirl girl = new BeautyGirl();
        girl.setAge(28);
        girl.setHeight(170.00);
        girls.add(girl);
        girl = new BeautyGirl();
        girl.setAge(25);
        girl.setHeight(183.00);
        girls.add(girl);
        girl = new BeautyGirl();
        girl.setAge(28);
        girl.setHeight(180.30);
        girls.add(girl);
        girl = new BeautyGirl();
        girl.setAge(32);
        girl.setHeight(170.00);
        girls.add(girl);
        girl = new BeautyGirl();
        girl.setAge(21);
        girl.setHeight(170.00);
        girls.add(girl);
        for (BeautyGirl beautyGirl : girls) {
            System.out.println(beautyGirl);
        }
        Collections.sort(girls);
        System.out.println("排序一下---------------------------------------------");
        for (BeautyGirl beautyGirl : girls) {
            System.out.println(beautyGirl);
        }
    }
}


输出结果如下:


美女{年龄:28身高:170.0}
美女{年龄:25身高:183.0}
美女{年龄:28身高:180.3}
美女{年龄:32身高:170.0}
美女{年龄:21身高:170.0}
排序一下---------------------------------------------
美女{年龄:21身高:170.0}
美女{年龄:25身高:183.0}
美女{年龄:28身高:170.0}
美女{年龄:28身高:180.3}
美女{年龄:32身高:170.0}


相关文章
|
4月前
|
搜索推荐 Java
Java 中 Comparator 和 Comparable 的区别
【8月更文挑战第22天】
55 0
|
4月前
|
Java
"Java排序大揭秘:Comparable与Comparator,究竟有何神秘区别?掌握它们,告别排序难题!"
【8月更文挑战第19天】Java提供Comparable与Comparator两种排序机制。Comparable位于`java.lang`包,定义了`compareTo()`方法以实现类的自然排序;Comparator位于`java.util`包,通过`compare()`方法提供外部定制排序。实现Comparable固定了排序策略,适用于类自带排序逻辑;使用Comparator则可在不改动类的前提下灵活定义多种排序规则,适合多样化的排序需求。选择合适机制可优化排序效率并增强代码灵活性。
26 0
|
6月前
|
Java
Java中Comparable接口和Comparator接口的区别(如果想知道Java中Comparable接口和Comparator接口的区别,那么只看这一篇就足够了!)
Java中Comparable接口和Comparator接口的区别(如果想知道Java中Comparable接口和Comparator接口的区别,那么只看这一篇就足够了!)
|
7月前
|
Java
彻底搞懂Java中的Comparable和Comparator
彻底搞懂Java中的Comparable和Comparator
271 0
|
7月前
|
Java
【JAVA学习之路 | 提高篇】Java比较器(comparable) &&(comparator)
【JAVA学习之路 | 提高篇】Java比较器(comparable) &&(comparator)
|
7月前
|
Java
【Java】通过Comparator比较器的方式给对象数组排序
【Java】通过Comparator比较器的方式给对象数组排序
58 0
|
7月前
|
算法 搜索推荐 Java
数据结构与算法(Java篇)笔记--Comparable接口
数据结构与算法(Java篇)笔记--Comparable接口
|
7月前
|
Java
java 实现Comparable接口排序,升序、降序、倒叙
java 实现Comparable接口排序,升序、降序、倒叙
61 0
|
7月前
|
Java
Java如何给数组排序Comparable方式
Java如何给数组排序Comparable方式
26 0
|
Java 编译器
深度解析Java中的Comparable接口和Comparator接口
深度解析Java中的Comparable接口和Comparator接口
135 0