/* * 挽救的比较器:Comparator * Comparable接口的主要特征是在类定义的时候就默认实现好的接口 * *
由于初期的设计并没有安排此类对象数组的排序,又突然需要实现对象数组的排序, *
那么这个时候不能修改book的情况下不能修改Comparable 只能使用 java。util。Comparator * *
在Comparator有两个方法 * int compare(T o1,
T o2) 比较其两个参数的顺序。 返回负整数,零或正整数,因为第一个参数小于, 等于或大于第二个参数。 在前面的描述中,符号sgn( ) 表达式表示数学符号函数, 其定义根据表达式的值是否为负,零或正返回的-1一个,0,或1。实现程序必须确保sgn(compare(x, y)) == -sgn(compare(y, x))所有x和y。
(这意味着当且仅当compare(y, x)引发异常时, compare(x, y)必须抛出异常。)实施者还必须确保关系是可传递的: ((compare(x, y)>0) && (compare(y, z)>0))
意味着compare(x, z)>0 。最后,实施者必须确保compare(x, y)==0 意味着sgn(compare(x, z))==sgn(compare(y,
z))为所有z 。一般情况,但不是严格要求(compare(x, y)==0) == (x.equals(y)) 。
一般而言,任何违反这种情况的比较方都应清楚地表明这一点。 推荐的语言是“注意:该比较器强制与等于”不一致的排序“。 boolean
equals(Object obj) 指示某个其他对象是否等于此比较器。
该方法必须遵守Object.equals(Object)的一般合同。 另外, 只有指定的对象也是一个比较器,这个方法只能返回true
,并且它与这个比较器的顺序相同。 因此, comp1.equals(comp2)意味着 sgn(comp1.compare(o1,
o2))==sgn(comp2.compare(o1, o2)) 对于每个对象参考o1和o2 。 请注意,
始终安全不要覆盖Object.equals(Object) 。 然而,在某些情况下,覆盖此方法可以通过允许程序确定两个
不同的比较器施加相同的顺序来提高性能。而真正要实现的是compare方法。需要单独准备出一个类来实现Comparator接口 此类来作为排序类
之前使用Comparable接口的时候利用的是Arrays类中的sort()方法,可是现在
更换一个接口以后,可以使用另外一个sort()方法 public static void sort(T[] a,
Comparator<? super T> c) * * * 请解释Comparator和Comparable *
如果对象数组要进行排序那么必须设置排序规则,可以使用Comparator和Comparable *
java.long.Comparable是在一个类定义的时候,实现好的接口,这样奔雷的对象数组接口 * 下定义有一个public int
compareTo方法, * java.util.Comparator是专门定义一个指定类的比较规则,属于挽救的比较操作 *
public int comparable() public boolean equals()
package leiku;
import java.util.Arrays;
import java.util.Comparator;
```java
class Book131 ///实现比较
{
private String title;
private double price;
public Book131() {}
public Book131(String title,double price)
{
this.title = title;
this.price = price;
}
@Override
public String toString() {
// TODO Auto-generated method stub
return "书名"+this.title+"价格"+this.price+"\n";
}
public void setPrice(double price)
{
this.price = price;
}
public double getPrice()
{
return price;
}
public void setTitle(String title)
{
this.title = title;
}
public String getTitle()
{
return title;
}
}
/*
* 定义排序的工具类
*/
class BookComparator implements Comparator<Book131>
{
@Override
public int compare(Book131 o1, Book131 o2)
{
// TODO Auto-generated method stub
if(o1.getPrice()>o2.getPrice())
{
return 1;
}
else if(o1.getPrice()<o2.getPrice())
{
return -1;
}
else
{
return 0;
}
}
}
public class bijiaoqiComparator {
public static void main(String[] args) {
// TODO Auto-generated method stub
Book131 books[] = new Book131[]
{
new Book131("asda",123),
new Book131("asdsdfa",131233),
new Book131("assfdsfda",1),
new Book131("asafasdfda",131)
};
Arrays.sort(books,new BookComparator());
System.out.println(Arrays.toString(books));
}
}