TreeSet中的compareTo()方法

在开发中,我们往往要用到自定义的对象,这些对象存在于集合中,自定义对对象进行排序,必须要实现CompareTo方法,并且类要用到接口的继承 implements Comparable<自定义类名>

// 规定对象的比较规则
public int compareTo(Student o) {
// TODO Auto-generated method stub

return this.id.compareTo(o.id);
}

很明显这样的一个简单的函数是将对象的id属性值拿来比较,如果这个函数返回值为1,也就是说这个集合中对象是按照id值升序排列的(this.id>o.id);

下面这个函数可以加强理解:

public int compareTo(Phone o) {
// TODO Auto-generated method stub

// 如果按照brand比较
// return this.brand.compareTo(o.brand);

// 按照price比较
// double result = this.price - o.price;
// return (int)result;

if (this.brand.compareTo(o.brand) == 0) {
double result = this.price - o.price;//如果品牌名一样,就按照价格比较
return (int)result;
}

return this.brand.compareTo(o.brand);//如果品牌名不一样 就按照品牌名字符串进行比较
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在JavaTreeSet是一个基于红黑树实现的有序集合。当我们向TreeSet添加元素时,它会自动根据元素的自然顺序进行排序。 在这个过程TreeSet会调用元素类的compareTo()方法来确定元素的顺序。因此,如果我们需要自定义元素的排序方式,就需要重写该方法。 以下是一个重写compareTo()方法的示例: ```java public class Student implements Comparable<Student> { private String name; private int age; public Student(String name, int age) { this.name = name; this.age = age; } // 重写compareTo方法 @Override public int compareTo(Student o) { if (this.age > o.age) { return 1; } else if (this.age < o.age) { return -1; } else { return this.name.compareTo(o.name); } } } ``` 在这个例子,我们创建了一个Student类,它包含一个name属性和一个age属性。我们在这个类实现了Comparable接口,并重写了compareTo方法,按照年龄升序排序,如果年龄相同则按照姓名升序排序。 当我们将Student对象添加到TreeSet时,会根据重写后的compareTo方法进行排序。 ```java TreeSet<Student> set = new TreeSet<>(); set.add(new Student("Tom", 21)); set.add(new Student("Jerry", 19)); set.add(new Student("Alice", 20)); for (Student s : set) { System.out.println(s.getName() + " " + s.getAge()); } ``` 输出结果为: ``` Jerry 19 Alice 20 Tom 21 ``` 注意:如果我们在重写compareTo方法时只考虑年龄,而不考虑姓名,则会出现相同年龄的Student对象无法添加到TreeSet的问题。因此,在重写compareTo方法时,需要考虑到所有可能影响元素顺序的因素。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值