自然排序:Comparable接口
- compareTo(Object o)方法
- 在此方法中指明如何判断当前类的对象大小。
- 具体步骤:
- 具体的A类实现Comparable接口
- 重写Comparable接口中的compareTo(Object o)方法,在此方法中指明比较类A的对象的大小标准
- 创建类A的多个实例,进行大小比较和排序
java
// @Override
// public int compareTo(Object o)
// {
// if(o == this)
// {
// return 0;
// }
//
// if(o instanceof Product)
// {
// Product p = (Product) o;
// return Double.compare(this.price,p.price);
// }
//
// throw new RuntimeException("类型不匹配");
// }
@Override
public int compareTo(Object o)
{
if(o == this)
{
return 0;
}
if(o instanceof Product)
{
Product p = (Product) o;
int value = Double.compare(this.price,p.price);
if(value !=0 )
{
return value;
}
return this.name.compareTo(p.name);
}
throw new RuntimeException("类型不匹配");
}
定制排序:Comparator接口
- compare(Object o1, Object o2)方法
- 在此方法中指明如何判断当前类的对象大小。
- 具体步骤:
- 创建一个实现了Comparator接口的实现类
- 在实现类中重写compare(Object o1, Object o2)方法,在此方法中指明的对象的比较大小标准
- 创建此实现类的对象,并传入相关方法中的参数位置中
java
@Test
public void test1()
{
Product[] p = new Product[5];
p[0] = new Product("HuaweiMate70",6299);
p[1] = new Product("Xiaomi16",4999);
p[2] = new Product("Ace1+",4799);
p[3] = new Product("Iphone17",9999);
p[4] = new Product("HonorMagic",6299);
//创建一个实现了Comparator接口的实现类的对象
Comparator comparator = new Comparator()
{
@Override
public int compare(Object o1, Object o2)
{
if(o1 instanceof Product && o2 instanceof Product)
{
Product p1 = (Product) o1;
Product p2 = (Product) o2;
//比较价格
// return Double.compare(p1.getPrice(), p2.getPrice());
//比较名字
return p1.getName().compareTo(p2.getName());
}
throw new RuntimeException("类型不匹配");
}
};
Arrays.sort(p,comparator);
for (int i = 0; i < p.length; i++)
{
System.out.println(p[i]);
}
}
两种方式的对比
-
Comparable自然排序:
- 单一的,唯一的
- comparaTo方法重写在对应类内部
-
Comparator定制排序:
- 灵活的,多样的
- compara方法重写在对应类外部