首页编程java编程java comparable是什么 java的comparable接口什么意思

java comparable是什么 java的comparable接口什么意思

编程之家2023-10-1291次浏览

大家好,如果您还对java comparable是什么不太了解,没有关系,今天就由本站为大家分享java comparable是什么的知识,包括java的comparable接口什么意思的问题都会给大家分析到,还望可以解决大家的问题,下面我们就开始吧!

java comparable是什么 java的comparable接口什么意思

...实现Comparator接口 //与Comparable 的区别

comparator接口与Comparable接口的区别

1. Comparator和 Comparable相同的地方

他们都是java的一个接口,并且是用来对自定义的class比较大小的,

java comparable是什么 java的comparable接口什么意思

什么是自定义class:如 public class Person{ String name; int age}.

当我们有这么一个personList,里面包含了person1, person2, persion3.....,我们用Collections.sort( personList),是得不到预期的结果的.这时肯定有人要问,那为什么可以排序一个字符串list呢:

如 StringList{"hello1","hello3","hello2"}, Collections.sort( stringList)能够得到正确的排序,那是因为 String这个对象已经帮我们实现了 Comparable接口,所以我们的 Person如果想排序,也要实现一个比较器。

java comparable是什么 java的comparable接口什么意思

2. Comparator和 Comparable的区别

Comparable

Comparable定义在 Person类的内部:

public class Persion implements Comparable{..比较Person的大小..},

因为已经实现了比较器,那么我们的Person现在是一个可以比较大小的对象了,它的比较功能和String完全一样,可以随时随地的拿来比较大小,因为Person现在自身就是有大小之分的。Collections.sort(personList)可以得到正确的结果。

Comparator

Comparator是定义在Person的外部的,此时我们的Person类的结构不需要有任何变化,如

public class Person{ String name; int age},

然后我们另外定义一个比较器:

public PersonComparator implements Comparator(){..比较Person的大小..},

在PersonComparator里面实现了怎么比较两个Person的大小.所以,用这种方法,当我们要对一个 personList进行排序的时候,我们除了了要传递personList过去,还需要把PersonComparator传递过去,因为怎么比较Person的大小是在PersonComparator里面实现的,如:

Collections.sort( personList, new PersonComparator()).

3. Comparator和 Comparable的实例

Comparable:

实现Comparable接口要覆盖compareTo方法,在compareTo方法里面实现比较:

public class Person implements Comparable{

String name;

int age

public int compareTo(Person another){

int i= 0;

i= name.compareTo(another.name);//使用字符串的比较

if(i== 0){//如果名字一样,比较年龄,返回比较年龄结果

return age- another.age;

} else{

return i;//名字不一样,返回比较名字的结果.

}

}

}

这时我们可以直接用 Collections.sort( personList)对其排序了.

Comparator:

实现Comparator需要覆盖 compare方法:

public class Person{

String name;

int age

}

class PersonComparator implements Comparator{

public int compare(Person one, Person another){

int i= 0;

i= one.name.compareTo(another.name);//使用字符串的比较

if(i== 0){//如果名字一样,比较年龄,返回比较年龄结果

return one.age- another.age;

} else{

return i;//名字不一样,返回比较名字的结果.

}

}

}

Collections.sort( personList, new PersonComparator())可以对其排序

4:总结

两种方法各有优劣,用Comparable简单,只要实现Comparable接口的对象直接就成为一个可以比较的对象,但是需要修改源代码,用Comparator的好处是不需要修改源代码,而是另外实现一个比较器,当某个自定义的对象需要作比较的时候,把比较器和对象一起传递过去就可以比大小了,并且在Comparator里面用户可以自己实现复杂的可以通用的逻辑,使其可以匹配一些比较简单的对象,那样就可以节省很多重复劳动了。

java 中compare 是什么

public int compareTo(Double anotherDouble)从数字上比较两个 Double对象。在应用到基本 double值时,通过此方法进行的比较与通过 Java语言的数值比较运算符(<、<=、==和>=>)进行的比较之间存在以下两方面的不同:

此方法认为 Double.NaN等于它自身,且大于其他所有 double值(包括 Double.POSITIVE_INFINITY)。

此方法认为 0.0d大于-0.0d。

这可以确保受此方法影响的 Double对象的自然顺序与 equals方法一致。

指定者:

接口 Comparable<Double>中的 compareTo

参数:

anotherDouble-要比较的 Double值。

返回:

如果 anotherDouble在数字上等同于此 Double,则返回 0;如果 Double在数字上小于此 anotherDouble,则返回小于 0的值;如果 Double在数字上大于此 anotherDouble,则返回大于 0的值。

打字不易,如满意,望采纳。

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);

}

}

看不明白欢迎再来询问

Java, Comparable作为参数类型

这个子类能出现的地方,父类就能出现;这里并不是一个真正的接口对象,因为接口是不能实例化的,但是这里可以写他的任何一个子类,父类引用指向子类;

也不是你所说的船任意类进去都行,在第一个参数中只能传递一个实现comparable接口的类的对象,第二个参数应该是可以传递任意可实例化对象,因为Object是任意类的父类

好了,文章到此结束,希望可以帮助到大家。

java中栈是什么意思,java中的“堆栈”是什么意思java collection是什么?java中collection是什么怎么理解怎么使用