java的comparable接口什么意思

如题所述

1.什么是Comparable接口
此接口强行对实现它的每个类的对象进行整体排序。此排序被称为该类的自然排序 ,类的 compareTo 方法被称为它的自然比较方法 。实现此接口的对象列表(和数组)可以通过 Collections.sort (和 Arrays.sort )进行自动排序。实现此接口的对象可以用作有序映射表中的键或有序集合中的元素,无需指定比较器。 强烈推荐(虽然不是必需的)使自然排序与 equals 一致。所谓与equals一致是指对于类 C 的每一个 e1 和 e2 来说,当且仅当(e1.compareTo((Object)e2) == 0) 与e1.equals((Object)e2) 具有相同的布尔值时,类 C 的自然排序才叫做与 equals 一致 。
2.实现什么方法
int compareTo(T o)
比较此对象与指定对象的顺序。如果该对象小于、等于或大于指定对象,则分别返回负整数、零或正整数。
强烈推荐 (x.compareTo(y)==0) == (x.equals(y)) 这种做法,但不是 严格要求这样做。一般来说,任何实现 Comparable 接口和违背此条件的类都应该清楚地指出这一事实。推荐如此阐述:“注意:此类具有与 equals 不一致的自然排序。”
参数:
o - 要比较的对象。
返回: 负整数、零或正整数,根据此对象是小于、等于还是大于指定对象。
抛出:
ClassCastException - 如果指定对象的类型不允许它与此对象进行比较。

3.实例
import java.util.*;
public class EmployeeSortTest {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Employee[] staff = new Employee[ 3 ];
staff[ 0 ] = new Employee( "harry Hacker" , 35000 );
staff[ 1 ] = new Employee( "carl cracke" , 75000 );
staff[ 2 ] = new Employee( "tony Tester" , 38000 );

Arrays.sort(staff); //sort方法可以实现对对象数组排序,但是必须实现 Comparable接口
/*Comparable接口原型为:
* public interface Comparable<T>
* {
* int compareTo(T other);//接口的中方法自动属于public方法
* }
*/
for (Employee e: staff)
System.out.println( "id=" +e.getId()+ " name=" +e.getName()+
".salary=" +e.getSalary());
}

}
/*
* 因为要实现对Employee对象的排序,所以在Employee类中要实现Comparable接口,
* 也就是要实现comepareTo()方法
*/
class Employee implements Comparable<Employee>
{
public Employee(String n, double s)
{
name = n;
salary = s;
Random ID = new Random();
id = ID.nextInt( 10000000 );
}
public int getId()
{
return id;
}
public String getName()
{
return name;
}

public double getSalary()
{
return salary;
}

public void raiseSalary( double byPercent)
{
double raise = salary *byPercent/ 100 ;
salary+=raise;
}

public int compareTo(Employee other)
{
if (id<other.id) //这里比较的是什么 sort方法实现的就是按照此比较的东西从小到大排列
return - 1 ;
if (id>other.id)
return 1 ;
return 0 ;
}
private int id;
private String name;
private double salary;
}
4.与Comparator的区别
Comparator位于包java.util下,而Comparable位于包java.lang下,Comparable接口将比较代码嵌入自身类中,而后者在一个独立的类中实现比较。 如果类的设计师没有考虑到Compare的问题而没有实现Comparable接口,可以通过 Comparator来实现比较算法进行排序,并且为了使用不同的排序标准做准备,比如:升序、降序。
我们看一个Comparator的例子:
import java.util.TreeSet;
import java.util.Comparator;
class NumComparator implements Comparator<NameTag> {
public int compare (NameTag left,NameTag right) {
return(left.getNumber() - right.getNumber());
}
}
public class CollectionNine {
public static void main(String arg[]) {
new CollectionNine();
}
CollectionNine() {
NumComparator comparator = new NumComparator();
TreeSet<NameTag> set = new TreeSet<NameTag>(comparator);
set.add(new NameTag("Agamemnon",300));
set.add(new NameTag("Cato",400));
set.add(new NameTag("Plato",100));
set.add(new NameTag("Zeno",200));
set.add(new NameTag("Archimedes",500));
for(NameTag tag : set)
System.out.println(tag);
}
}
看不明白欢迎再来询问
温馨提示:内容为网友见解,仅供参考
第1个回答  2018-05-09
类实现了Comparable接口,该类的实例就可以调用compareTo方法比较大小,一般在排序时会调用,如Collections.sort(List<T> list);
第2个回答  2018-08-14
可比较的
在自定义类里实现这个接口,从而实现compar方法,在数组或集合中可以sort排序

java的comparable接口什么意思
Comparator位于包java.util下,而Comparable位于包java.lang下,Comparable接口将比较代码嵌入自身类中,而后者在一个独立的类中实现比较。 如果类的设计师没有考虑到Compare的问题而没有实现Comparable接口,可以通过 Comparator来实现比较算法进行排序,并且为了使用不同的排序标准做准备,比如:升序、降序。我...

详解Comparable和Comparator
实现Comparable接口意味着该类支持排序。一旦类实现了Comparable接口,其对象即可用于有序映射(如TreeMap)中的键或有序集合(如TreeSet)中的元素,无需额外指定比较器。接口中的核心函数compareTo方法返回一个int值,表示两个对象的相对大小。若返回正数,表示第一个对象大于第二个;若返回零,两者相等;...

Comparable和Comparator的区别
在Java编程中,`Comparable`和`Comparator`是用于实现对象比较功能的关键接口。`Comparable`接口是一个内比较器,允许类实现与自身进行比较的功能,而`Comparator`则是一个外比较器,提供了一种灵活的比较方式,尤其在对象未实现`Comparable`接口或需要自定义比较逻辑时。当使用`Collections`类的`sort`方法对...

Java 中那些绕不开的内置接口——Comparable 和 Comparator
Java中的Comparable和Comparator是两个核心内置接口,它们在名称上看似相似,但作用各有不同。Comparable用于指示一个对象能够与其他对象进行比较,而Comparator则是提供外部比较机制的工具。让我们通过实例来深入理解它们。首先,Comparable接口(java.lang.Comparable)定义了一个可比较对象,如数字和字符串,它们...

来吧,一文彻底搞懂Java中的Comparable和Comparator
Comparable 接口Comparable接口负责让类能够自定义对象之间的比较。要使用Comparable接口,类需要覆盖compareTo()方法,以便根据自身的规则对对象进行比较。下面以Cmower类为例,展示了如何通过compareTo()方法实现年龄排序。Cmower类实现Comparable接口在Cmower类中,我们定义了年龄和姓名字段,并实现Comparable接口...

Comparable和Comparator接口是干什么的?它们的区别是什么?
【答案】:Java提供了只包含一个compareTo()方法的Comparable接口。这个方法可以个给两个对象排序。具体来说,它返回负数,0,正数来表明输入对象小于,等于,大于已经存在的对象。Java提供了包含compare()和equals()两个方法的Comparator接口。compare()方法用来给两个输入参数排序,返回负数,0,正数表明第...

Comparable和Comparator接口是什么?
在Java中,当我们需要对Array或Collection进行排序操作,通常需要自定义类实现Comparable接口。Comparable接口的核心是compareTo(T OBJ)方法,它被排序方法调用,用于比较对象的大小。开发者需要重写此方法,通过返回负整数、0或正整数来指示两个对象的大小关系。然而,当需求更复杂时,比如CEO希望按薪资排序员工...

comparable和Comparator 的区别
)。Comparable是一个对象本身就已经支持自比较所需要实现的接口(如String Integer自己就可以完成比较大小操作)而Comparator是一个专用的比较器,当这个对象不支持自比较或者自比较函数不能满足你的要求时,你可以写一个比较器来完成两个对象之间大小的比较。

java的Comparable和Comparator区别
`Comparable`可以被视为一个对象内部的比较机制,它主要用于实现数据类型的自然排序规则。反之,`Comparator`作为外部比较器,通常用于更复杂或特定的比较逻辑,如排序算法。实现与使用场景 使用`Comparable`时,通常需将实现此接口的类与排序方法结合,直接使用该类创建的实例来进行比较。而借助`Comparator`,...

java中Comparable和Comparator两种比较器的区别
Comparable和Comparator接口都是为了对类进行比较,众所周知,诸如Integer,double等基本数据类型,java可以对他们进行比较,而对于类的比较,需要人工定义比较用到的字段比较逻辑。可以把Comparable理解为内部比较器,而Comparator是外部比较器,基本的写法如下:class Apple implements Comparable<Apple>{ int id;...

相似回答