1.概述
Java中的对象,正常情况下,只能进行比较:==或 != 。不能使用 >或<的,但是在开发场景中,我们需要对多个对象进行排序,言外之意,就需要比较对象的大小。 如何实现?使用两个接口中的任何一个:Comparable或 Comparator
Java实现对象排序的方式有两种:
自然排序:java.lang.Comparable
定制排序:java.util.Comparator
2.Comparable自然排序举例
import org.junit.Test;
import java.util.Arrays;
public class CompareTest {
/**
* 4.对于自定义类来说,如果需要排序,我们可以让自定义类实现
Comparable接口,重写compareTo(obj)方法。
* 在compareTo(obj)方法中指明如何排序
*/
@Test
public void test2(){
Goods[] arr = new Goods[5];
arr[0] = new Goods("lenovoMouse",34);
arr[1] = new Goods("dellMouse",43);
arr[2] = new Goods("xiaomiMouse",12);
arr[3] = new Goods("huaweiMouse",65);
arr[4] = new Goods("microsoftMouse",43);
Arrays.sort(arr);
System.out.println(Arrays.toString(arr));
}
}
3.自定义类实现Comparable
import java.util.Arrays;
import java.util.Comparator;
public class ComporableText {
public void frist(){
Goods[] arr = new Goods[4];
arr[0] = new Goods("yongli",14);
arr[1] = new Goods("aiguo",20);
arr[2] = new Goods("deren",14);
arr[3] = new Goods("bugai",4);
Arrays.sort(arr);
System.out.println(Arrays.toString(arr));
Arrays.sort(arr, new Comparator() {
// 商品由小到大排列,如有价格一样则比较名称
@Override
public int compare(Object o1, Object o2) {
if (o1 instanceof Goods && o2 instanceof Goods){
Goods goods = (Goods) o1;
Goods goods1 = (Goods) o2;
if (goods.getMoney() == goods1.getMoney()){
return goods.getName().compareTo(goods1.getName());
}else{
return Double.compare(goods.getMoney(), goods1.getMoney());
}
}
throw new RuntimeException("输入类型不对");
}
});
System.out.println(Arrays.toString(arr));
}
public static void main(String[] args) {
ComporableText com = new ComporableText();
com.frist();
}
}