接口和comparable、comparator。

*接口定义:使用interface关键字

* [修饰符] interface 接口名 [extends 父接口1,父接口2...]{
* //常量的声明
* //方法的声明
* }
*接口成员的特点:
*1.接口中所有的成员变量是常量,默认修饰符为public static final
*2.接口中所有的方法都是抽象方法,默认修饰符为:public abstract
*3.接口不能实例化,接口不能构造方法(抽象类不能实例化,但可以有构造方法)
*4.java类是单继承,但接口可以是多继承
*5.一个非抽象类实现实现接口,必须重写接口中的抽象方法,抽象类实现接口可以重写部分抽象方法。
*6.一个类只能继承一个父类,但可以实现多个接口
*
*如果一个类继承父类并实现了接口如何编写?
* [修饰符] class 类名 [extends 父类名 implements 接口名1,接口名2..]{
* }

public interface USB {
void work();
}

public class Printer implements USB {

@Override
public void work() {
System.out.println("我是打印机,我能打印资料....");
}

}

public class Keyborad implements USB{

@Override
public void work() {
System.out.println("我是机械键盘,我能打字....");
}

}

public class Mouse implements USB {

@Override
public void work() {
System.out.println("我是鼠标,我能玩游戏!");
}

}

public class Test {
public void useUSB(USB usb){
System.out.println("请向USB接口插入设备:");
usb.work();
}

public static void main(String[] args) {
Test test = new Test();
test.useUSB(new Mouse());
System.out.println("---------------");
test.useUSB(new Keyborad());
System.out.println("---------------");
test.useUSB(new Printer());
}
}

comparator:比较器。

public class Student {
private String name;
private int age;
private int score;
public Student(String name, int age, int score) {
super();
this.name = name;
this.age = age;
this.score = score;
}
public Student() {
super();
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public int getScore() {
return score;
}
public void setScore(int score) {
this.score = score;
}
@Override
public String toString() {
return "Student [name=" + name + ", age=" + age + ", score=" + score + "]";
}

}

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

java.util.Comparator接口:比较器
* int compare(Object o1, Object o2):比较用来排序的两个参数。
* 根据第一个参数小于、等于或大于第二个参数分别返回负整数、零或正整数。
*/
public class ScoreComparator implements Comparator{

/**
* 定义比较规则:按照分数的降序进行排列
*/
@Override
public int compare(Object o1, Object o2) {
Student stu1=null;
Student stu2=null;
if(o1 instanceof Student){
stu1=(Student)o1;
}
if(o2 instanceof Student){
stu2=(Student)o2;
}
// if(stu1.getScore()>stu2.getScore()){
// return 1;
// }else if(stu1.getScore()==stu2.getScore()){
// return 0;
// }else{
// return -1;
// }
return -(stu1.getScore()-stu2.getScore());
}

}

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

ava.util.Arrays类
* sort(Object[] objs,Comparator c):按照指定的比较器对指定数组进行排序。
*
*/
public class TestArrays {
public static void main(String[] args) {
Student[] stus = new Student[5];//保存学生信息的数组
stus[0]=new Student("aa",20,80);
stus[1]=new Student("bb",22,78);
stus[2]=new Student("cc",18,90);
stus[3]=new Student("dd",25,82);
stus[4]=new Student("ee",24,81);
System.out.println("排序前:");
for (Student student : stus) {
System.out.println(student);
}
Arrays.sort(stus, new ScoreComparator());//利用指定的比较器完成比较
System.out.println("排序后:");
for (Student student : stus) {
System.out.println(student);
}

}
}

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

comparable:

*java.util.Arrays类
*sort(Object[] objs):根据元素的自然顺序对指定对象数组按升序进行排序。数组中的所有元素都必须实现 Comparable接口
*
*/
public class TestArrays {
public static void main(String[] args) {
Student[] stus = new Student[5];//保存学生信息的数组
stus[0]=new Student("aa",20,80);
stus[1]=new Student("bb",22,78);
stus[2]=new Student("cc",18,90);
stus[3]=new Student("dd",25,82);
stus[4]=new Student("ee",24,81);
System.out.println("排序前:");
for (Student student : stus) {
System.out.println(student);
}
Arrays.sort(stus);
System.out.println("排序后:");
for (Student student : stus) {
System.out.println(student);
}
}
}

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

java.lang.Comparable接口:此接口强行对实现它的每个类的对象进行整体排序。
* 排序规则在compareTo()方法中定义。
* 当调用java.util.Arrays类中sort(Object[] objs)时,
* 程序会调用compareTo()方法对对象进行比较,
* 如果该方法返回正整数(1)时,代表当前对象大于待比较对象;
* 如果返回0,代表当前对象等于待比较对象
* 如果该方法返回负整数(-1)时,代表当前对象小于待比较对象;
*实现思路:
*1.实现Comparable接口,并重新其compareTo方法
*2.在compareTo方法中定义比较规则。返回值应该是正整数,零和负整数。
*3.在调用Arrays.sort(Object[] objs)方法的过程中,sort方法的内部对调用compareTo方法进行比较。
*
*/
public class Student implements Comparable{
private String name;
private int age;
private int score;
public Student(String name, int age, int score) {
super();
this.name = name;
this.age = age;
this.score = score;
}
public Student() {
super();
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public int getScore() {
return score;
}
public void setScore(int score) {
this.score = score;
}
@Override
public String toString() {
return "Student [name=" + name + ", age=" + age + ", score=" + score + "]";
}
/**
* 制定比较规则:
* compareTo(Object o):比较当前对象与指定对象o之间的关系。
* 如果当前对象大于指定对象o返回值是正整数
* 如果当前对象等于指定对象o返回值是零
* 如果当前对象小于指定对象o返回值是负整数
*/

@Override
public int compareTo(Object o) {
Student stu = (Student)o;
// if(age>stu.getAge()){
// return 1;
// }else if(age==stu.getAge()){
// return 0;
// }else{
// return -1;
// }
return (age-stu.getAge());
}

}

时间: 2024-08-07 00:17:10

接口和comparable、comparator。的相关文章

关于comparator接口和comparable接口以及它们各自的方法compare()和compareTo()

在今天做的LeetCode的题中有两道都出现了利用接口实现对象的排序,两题的相关链接: 1.利用comparable接口对对象排序 2.利用comparator接口实现排序 由于之前都没接触过这两个接口,一时不能明白它们的作用,所以在网上查找了很多资料,现在大致弄清楚一些,现在记录下来,有什么欠缺,欢迎大家及时指正 1.Comparable<T>接口 在java API文档中描述此接口是强行将实现它的每一个类的对象进行整体排序-----称为该类的自然排序,实现此接口的对象列表和数组可以用Col

comparator接口与Comparable接口的区别

1. Comparator 和 Comparable 相同的地方 他们都是java的一个接口, 并且是用来对自定义的class比较大小的, 什么是自定义class: 如 public class Person{ String name; int age }. 当我们有这么一个personList,里面包含了person1, person2, persion3....., 我们用Collections.sort( personList ), 是得不到预期的结果的. 这时肯定有人要问, 那为什么可以

Java中Comparator接口和Comparable接口的使用

一般情况下在实现对对象元素的数组或集合进行排序的时候会用到Comparator和Comparable接口,通过在元素所在的类中实现这两个接口中的一个,然后对数组或集合调用Arrays.sort或者Collentions.sort方法即可实现对数组或集合的排序.就sort方法里面的参数来说,实现了不同的接口则传递的参数也不尽相同.对于实现了Comparator接口的类来说,sort方法需要接受的参数不仅包括数组或集合,还要包括实现了该接口的类对象:而对实现了Comparable接口的类来说,参数不

SunnyAmy comparator接口与Comparable接口的区别

1. Comparator 和 Comparable 相同的地方 他们都是java的一个接口, 并且是用来对自定义的class比较大小的, 什么是自定义class: 如 public class Person{ String name; int age }. 当我们有这么一个personList,里面包含了person1, person2, persion3....., 我们用Collections.sort( personList ), 是得不到预期的结果的. 这时肯定有人要问, 那为什么可以

比较接口:Comparable和Comparator

Comparable和Comparator是两个用于定义对象之间比较规则的接口. 一.public interface Comparator<T> Comparator接口中有两个方法(不止两个): 1.int compare(Object obj1,Object obj2) obj1>obj2,返回正值: obj1=obj2,返回0: obj1<obj2,返回负值. 通过重写compare()方法,可以改变对象排序的方式. 2.boolean equals(Object obj)

比较接口(Comparable ,Comparator)及流的聚合操作

Comparable 及 Comparator 的区别 Comparable 一个内比较器,类可以和自己比较 compareTo() 自然比较方法 public interface Comparable<T>{ public int compareTo(T o); } public class Book implements Comparable<Book>{ String name; int price; public Book(String name,int price){ s

Comparable接口与Comparator接口的比较————Comparator接口详解

Comparator接口位于:java.util包中. Comparator接口:1. 强行对某个对象的Collection进行整体排序.值得注意的是:Comparator接口可以作为参数传到一些sort()方法中,例如:Collection.sort(List<T> list, Comparator<? super T> c).Arrays.sort(T[] a, Comparator<? super T> c); 2. Comparator接口指定的顺序,可以不是字

Comparable Comparator equals

为了让类的对象间可以排序,通常有两种方法--Comparable<T> 与 Comparator<T>. Comparable泛型接口 int java.lang.Comparable.compareTo(T o) 本对象与参数进行对比.返回为负表示小于,零表示相等,正数表示大于. Compares this object with the specified object for order. Returns a negative integer, zero, or a posi

Java学习笔记--Comparable &amp; Comparator

一.    Comparable<T>: Comparable是类内部的比较器,用于创建类的时候实现此接口,同时实现比较方法:对于不能修改源码的类则无法应用此方式进行比较排序等. 源码为: 1 public interface Comparable<T> { 2 public int compareTo(T o); 3 } 可以使用如Arrays.sort(T[] a)或Collections.sort(List<T> list)来使用实现了Comparable<