JAVA-接口实例

一.comparable接口

        何为comparable接口?我们可以查阅jdk来了解到此接口可用于进行排序

 那么我们该如何使用呢?

第一步:

        我们要实现comparable接口!具体的代码实现以下:

class Student implements Comparable<Student>{

    public String name;
    public int age;

    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

注意 这里用了接口,所以我们必须重写一个方法!

        根据ctrl加鼠标左键查阅comparable我们可知

 因此:

import java.util.Arrays;
import java.util.Comparator;

class Student implements Comparable<Student>{

    public String name;
    public int age;

    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }

    @Override
    public int compareTo(Student o) {
        if(this.age-o.age>0){
            return 1;
        }else if(this.age-o.age<0){
            return -1;
        }else{
            return 0;
        }
    }
}


public class Testdemo {
    public static void main(String[] args) {
        Student[] student = new Student[3];
        student[0] = new Student("张三",18);
        student[1] = new Student("王三",10);
        student[2] = new Student("李三",19);
        Arrays.sort(student);
        System.out.println(Arrays.toString(student));
    }
}

 这是一个简单的comparable接口的使用

但在main方法内 我们要只是单纯的比较大小 而不是排序,我们可以这样做:

         

import java.util.Arrays;
import java.util.Comparator;

class Student implements Comparable<Student>{

    public String name;
    public int age;

    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }

    @Override
    public int compareTo(Student o) {   //这里是 age
        if(this.age-o.age>0){
            return 1;
        }else if(this.age-o.age<0){
            return -1;
        }else{
            return 0;
        }
    }
}


public class Testdemo {
    public static void main(String[] args) {
        Student student1 = new Student("lisi",18);
        Student student2 = new Student("zhangsan",19);

        if(student1.compareTo(student2)>0){
            System.out.println("student1 > student2");
        } else if (student1.compareTo(student2)<0) {
            System.out.println("student1<student2");
        }else{
            System.out.println("相等");
        }
    }

但是 这个接口 对类侵入性太强了!

如果我们的需求更换了:比如比较姓名,那我们的代码就需要改写!

        二.comparator 

comparator就是应付以上问题的!

class Student {
    public String name;
    public int age;

    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}
class AgeComparator implements Comparator<Student>{
    @Override
    public int compare(Student o1, Student o2) {
        //return 0;
        return o1.age - o2.age;
    }
}
class NameComparator implements Comparator<Student>{
    @Override
    public int compare(Student o1, Student o2) {
        //return 0;
        return o1.name.compareTo(o2.name);
    }
}

public class Testdemo {
    public static void main(String[] args) {
        Student[] students = new Student[3];
        students[0] = new Student("zhangsan",18);
        students[1] = new Student("lisan",20);
        students[2] = new Student("wangzhangsan",10);
        //实例化比较器
        AgeComparator ageComparator = new AgeComparator();
        NameComparator nameComparator = new NameComparator();
        //填土比较器
        Arrays.sort(students,ageComparator);
        System.out.println(Arrays.toString(students));
    }

这里 我们 就 学完了 Comparable 接口 和 Comparator 接口 , 下面我们就来找一下 两者 的 区别 .

Comparable 和 Comparator 都是用来实现元素排序的,它们二者的区别如下 

Comparable 是“比较”的意思,而 Comparator 是“比较器”的意思; 
Comparable 是通过重写 compareTo 方法实现排序的,而 Comparator 是通过重写 compare 方法实现排序的;
Comparable 必须由自定义类内部实现排序方法,而 Comparator 是外部定义并实现排序的。
所以用一句话总结二者的区别:Comparable可以看作是“对内”进行排序接口,而Comparator` 是“对外”进行排序的接口

简单来说: Comparable 对类 的 侵入性高, 一旦写好比较规则,就不能轻易改变 。
而 Cinoarator 对类的 侵入性低

 

接下来我们可以试着写一个模拟qosrt!


import java.util.Arrays;
import java.util.Comparator;

class Student implements Comparable<Student>{

    public String name;
    public int age;

    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }

    @Override
    public int compareTo(Student o) {   //这里是 age
        if(this.age-o.age>0){
            return 1;
        }else if(this.age-o.age<0){
            return -1;
        }else{
            return 0;
        }
    }
}
public class Testdemo {
    public static void bbulesort(Comparator[] array){
        for (int i = 0; i < array.length - 1; i++) {
            for (int j = 0; j < array.length - i - 1; j++) {
                Comparator tmp = array[j];
                array[j] = array[j+1];
                array[j+1] = tmp;
            }
        }
    }
    public static void main(String[] args) {
        Student[] students = new Student[3];
        students[0] = new Student("zhangsan",18);
        students[1] = new Student("lisan",20);
        students[2] = new Student("wangzhangsan",10);
        bbulesort(students);
        System.out.println(Arrays.toString(students));
    }

    public static void main2(String[] args) {
        Student[] students = new Student[3];
        students[0] = new Student("zhangsan",18);
        students[1] = new Student("lisan",20);
        students[2] = new Student("wangzhangsan",10);

        AgeComparator ageComparator = new AgeComparator();
        NameComparator nameComparator = new NameComparator();

        Arrays.sort(students,ageComparator);
        System.out.println(Arrays.toString(students));
    }

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个Java接口编程的实例,该实例演示了如何使用命令模式实现一个简单的遥控器程序: ```java // 定义一个命令接口 interface Command { void execute(); } // 定义一个具体的命令类 class LightOnCommand implements Command { private Light light; public LightOnCommand(Light light) { this.light = light; } public void execute() { light.on(); } } // 定义一个接收者类 class Light { public void on() { System.out.println("Light is on"); } public void off() { System.out.println("Light is off"); } } // 定义一个遥控器类 class SimpleRemoteControl { private Command slot; public SimpleRemoteControl() {} public void setCommand(Command command) { slot = command; } public void buttonWasPressed() { slot.execute(); } } // 测试程序 public class RemoteControlTest { public static void main(String[] args) { SimpleRemoteControl remote = new SimpleRemoteControl(); Light light = new Light(); LightOnCommand lightOn = new LightOnCommand(light); remote.setCommand(lightOn); remote.buttonWasPressed(); } } ``` 该程序中,我们定义了一个命令接口`Command`,并实现了一个具体的命令类`LightOnCommand`,该类实现了`Command`接口,并持有一个接收者对象`Light`。我们还定义了一个遥控器类`SimpleRemoteControl`,该类持有一个命令对象,并提供了一个按钮按下的方法`buttonWasPressed()`,该方法会调用命令对象的`execute()`方法。在测试程序中,我们创建了一个遥控器对象和一个灯对象,并将灯对象包装成一个命令对象,然后将该命令对象设置到遥控器对象中,最后按下遥控器按钮,灯就会被打开。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值