Effective Java 【考虑实现Comparable接口】

Effective Java --Comparable接口

compareTo方法是Comparable接口的唯一方法。类实现了Comparable接口,表明它的实例具有内在的排序关系。

自己实现compareTo方法应该注意的点:

自反性: x.compareTo(x) == 0

可传递性: x.compareTo(y)>0 && y.compareTo(z)>0 ==> x.compareTo(z) > 0

可逆性: x.compareTo(y) == -y.compareTo(x)

建议: (x.compareTo(y) == 0) == x.equals(y) 

 

 

例子:

public class ComparableImpl  implements Comparable<ComparableImpl>{

public static void main(String[] args) {

ComparableImpl A = new ComparableImpl("A",9);
ComparableImpl B = new ComparableImpl("B",5);
ComparableImpl C = new ComparableImpl("B",3);

//TreeSet 去重 排序
TreeSet set = new TreeSet();
set.add(A);
set.add(B);
set.add(C);

while(!set .isEmpty()){
System.out.println(set.pollFirst());
}
}

private String name;
private Integer age;

public int getAge() {
return age;
}
public String getName() {
return name;
}

public ComparableImpl(String name , int age)
{
this.name = name;
this.age = age;
}

@Override
public int compareTo(ComparableImpl o) {
return this.name.compareTo(o.getName()) == 0 ? this.age.compareTo(o.getAge()) : this.name.compareTo(o.getName());
}

@Override
public String toString() {
return "ComparableImpl{" +"name='" + name + '\'' +", age=" + age +'}';
}
}

运行结果:

ComparableImpl{name='A', age=9}
ComparableImpl{name='B', age=3}
ComparableImpl{name='B', age=5}

 

转载于:https://www.cnblogs.com/noobtop/p/10771986.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实现 `Comparable` 接口可以让对象具有可比性,方便进行排序等操作。在 Android 中,实现 `Comparable` 接口的方法与 Java 中相同。 首先,在类的声明中添加 `implements Comparable<类名>`,表示该类实现了 `Comparable` 接口,并指定了比较的类型为该类。 然后在类中实现 `compareTo` 方法,该方法返回一个整数值,表示当前对象与传入对象的大小关系。如果当前对象小于传入对象,返回负数;如果当前对象等于传入对象,返回0;如果当前对象大于传入对象,返回正数。 例如,假设有一个 `Person` 类,包含姓名和年龄两个属性,我们可以按照年龄大小比较两个人的大小关系。代码如下: ```java public class Person implements Comparable<Person> { private String name; private int age; public Person(String name, int age) { this.name = name; this.age = age; } public String getName() { return name; } public int getAge() { return age; } @Override public int compareTo(Person person) { return this.age - person.getAge(); } } ``` 在 `compareTo` 方法中,我们比较当前对象的年龄属性与传入对象的年龄属性的大小关系。 使用时,我们可以将多个 `Person` 对象加入到一个 `List` 中,然后使用 `Collections.sort` 方法对其进行排序。例如: ```java List<Person> list = new ArrayList<>(); list.add(new Person("Alice", 20)); list.add(new Person("Bob", 18)); list.add(new Person("Charlie", 25)); Collections.sort(list); ``` 排序后,`list` 中的对象按照年龄从小到大排列。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值