java 比较器是什么(java 中compare 是什么)
各位老铁们,大家好,今天由我来为大家分享java 比较器是什么,以及java 中compare 是什么的相关问题知识,希望对大家有所帮助。如果可以帮助到大家,还望关注收藏下本站,您的支持是我们最大的动力,谢谢大家了哈,下面我们开始吧!
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中的queue类是什么,啥作用
java中的queue类是队列数据结构管理类。在它里边的元素可以按照添加它们的相同顺序被移除。
队列通常(但并非一定)以 FIFO(先进先出)的方式排序各个元素。不过优先级队列和 LIFO队列(或堆栈)例外,前者根据提供的比较器或元素的自然顺序对元素进行排序,后者按 LIFO(后进先出)的方式对元素进行排序。无论使用哪种排序方式,队列的头都是调用remove()或poll()所移除的元素。在 FIFO队列中,所有的新元素都插入队列的末尾。其他种类的队列可能使用不同的元素放置规则。每个Queue实现必须指定其顺序属性。
offer添加一个元素并返回true如果队列已满,则返回false
poll移除并返问队列头部的元素如果队列为空,则返回null
peek返回队列头部的元素如果队列为空,则返回null
put添加一个元素如果队列满,则阻塞
take移除并返回队列头部的元素如果队列为空,则阻塞
element返回队列头部的元素如果队列为空,则抛出一个NoSuchElementException异常
add增加一个元索如果队列已满,则抛出一个IIIegaISlabEepeplian异常
remove移除并返回队列头部的元素如果队列为空,则抛出一个
NoSuchElementException异常
注意:poll和peek方法出错进返回null。因此,向队列中插入null值是不合法的。
还有带超时的offer和poll方法重载,例如,下面的调用:
boolean success= q.offer(x,100,TimeUnit.MILLISECONDS);
尝试在100毫秒内向队列尾部插入一个元素。如果成功,立即返回true;否则,当到达超时进,返回false。同样地,调用:
Object head= q.poll(100, TimeUnit.MILLISECONDS);
如果在100毫秒内成功地移除了队列头元素,则立即返回头元素;否则在到达超时时,返回null。
阻塞操作有put和take。put方法在队列满时阻塞,take方法在队列空时阻塞。
Queue接口与List、Set同一级别,都是继承了Collection接口。LinkedList实现了Queue接口。Queue接口窄化了对LinkedList的方法的访问权限(即在方法中的参数类型如果是Queue时,就完全只能访问Queue接口所定义的方法了,而不能直接访问 LinkedList的非Queue的方法),以使得只有恰当的方法才可以使用。BlockingQueue继承了Queue接口。
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 比较器是什么和java 中compare 是什么的问题解决了您的问题,那么我们由衷的感到高兴!