Comparable接口实现自然排序
商品类:
/** * 商品类 * @author * @create 2022-02-28-13:07 */ public class Goods implements Comparable{ private String name; private double price; public Goods() { } public Goods(String name, double price) { this.name = name; this.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; } @Override public String toString() { return "Goods{" + "name=" + name + + ", 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(this.price< goods.price){ return -1; }else{ return this.name.compareTo(goods.name);//加上一个符号就是从高到低进行排序了 } } throw new RuntimeException("传入的数据类型不一致!"); } }
比较器:
import org.junit.Test; import java.util.Arrays; /** * * 一、说明:Java中的对象,正常情况下只能进行比较:== 或!=,不能使用> <的 * 但在开发的过程中需要对多个对象进行排序,需要比较对象的大小 * 使用两个接口中的任何一个实现:Comparable或Comparator * 二、Comparable接口的使用: * * * * @author * @create 2022-02-28-12:55 */ public class CompareTest { /* Comparable接口的使用举例:自然排序 1.像String、包装类实现了Comparable接口,重写了compareTo的(obj)方法,给出了比较两个对象大小的方式 2.像String、包装类重写了CompareTo方法以后,进行了从小到大的排列 3.重写compareTo的(obj)方法的规则: 如果当前对象this大于形参obj,返回正整数, 当前对象小于形参obj,返回负数, 等于obj,返回零 4.对于自定义类来说,如果需要排序,我们可以让自定义类实现Comparable接口,重写compareTo(obj)方法 在compareTo()方法中指明如何排序 */ @Test public void test1(){ String[] arr=new String[]{"AA","CC","MM","GG","DD"}; Arrays.sort(arr); System.out.println(Arrays.toString(arr)); } @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)); } }
如果是String或者包装类,其中已经重写了compareTo()方法,直接调用即可。
如果是自定义类,需要进行排序时,实现Comparable接口,将需要排序的方法写在重写的compareTo()方法中。
下一篇:
学习笔记09 - java 泛型