/**
* java比较器
* 1--String、包装类实现了Compare接口,重写了compareTo()方法,给出了比较两个对象大小的方法
* 2--自定义类实现Compare排序 需要实现Comparable接口并且重写compareTo()方法
* compareTo()重写规则:
* 如果当前对象this大于传入对象obj 则返回正整数
* 如果当前对象this小于传入对象obj 则返回负整数
* 如果当前对象this等于传入对象obj 则返回0
* 3--Comparator接口:实现定制排序
*/
//String、包装类实现了Compare接口,重写了compareTo()方法,给出了比较两个对象大小的方法(默认从低到高)
@Test
public void test() {
String[] str = new String[]{"ab", "ba", "cc", "df", "em", "ee"};
Arrays.sort(str);
System.out.println(Arrays.toString(str));
}
}
public class CompareTest {
//自定义类实现Compare排序
@Test
public void test1() {
Goods[] goods = new Goods[4]; //创建对象数组
goods[0] = new Goods("dellMouse", 100);
goods[1] = new Goods("lianxiangMouse", 200);
goods[2] = new Goods("xiaomiMouse", 50);
goods[3] = new Goods("huaweiMouse", 400);
Arrays.sort(goods); //实现接口并重写了方法后可以进行排序
System.out.println(Arrays.toString(goods)); //[Goods{name='xiaomiMouse', price=50.0}, Goods{name='dellMouse', price=100.0}, Goods{name='lianxiangMouse', price=200.0}, Goods{name='huaweiMouse', price=400.0}]
}
}
//自定义类实现Compare排序 需要实现Comparable接口并且重写compareTo()方法
class Goods implements Comparable {
private String name;
private double price;
public Goods() {
}
public Goods(String name, double price) {
this.name = name;
this.price = price;
}
@Override
public String toString() {
return "Goods{" +
"name='" + name + '\'' +
", price=" + price +
'}';
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
//自定义排序的方式:按照price从低到高排序
@Override
public int compareTo(Object o) {
if (o instanceof Goods) {
Goods goods = (Goods) o; //向上强转
if (this.price > goods.price) {
return 1;
} else if (goods.price > this.price) {
return -1;
} else {
return 0;
}
}
throw new RuntimeException("传入数据类型不匹配!");
}
}
Comparator接口实现自定义排序:
@Test
public void test(){
String[] arr = new String[]{"ab","bh","kl","ff","rr","ff"};
Arrays.sort(arr, new Comparator(){ //调用Comparator构造器并且重写Compare方法
@Override
public int compare(Object o1, Object o2) {
if (o1 instanceof String && o2 instanceof String){
String s1 = (String) o1;
String s2 = (String) o2;
return -s1.compareTo(s2); //实现从高到低排序
}
throw new RuntimeException("传入数据类型不匹配!");
}
});
System.out.println(Arrays.toString(arr));
}