0
点赞
收藏
分享

微信扫一扫

Java基础(22)

SPEIKE 2022-03-20 阅读 53
  • 如果使用Comparator自定义定义排序的写法,则默认类上的Comparable比较则无效

分析:

  • 定义一个类用于封装产生的序号和对应的数据
  • 因为需要对数据进行排序,则必须是可比较的类。实现方式可以是类实现Comparable接口
public class Num implements Comparable<Num> {
    private int index;//序号
    private int number;//具体存储的整数值
    
    public int compareTo(Num num){
        return this.number-num.number;
    }
}

生成数据并存储在TreeSet中,因为要求排序

Set<Num> set=new TreeSet<>();
Random r=new Random();
while(set.size()<10){
    Num tmp=new Num(set.size()+1,r.nextInt(10)+1);
    set.add(tmp);
}
set.forEach(System.out::println);

排序方法2:使用sort方法

List<Num> list=new ArrayList<>();
Random r=new Random();
//因为List本身并没有去重操作,所以需要自行编码实现
while(list.size()<10){
	Num tmp=new Num(list.size()+1,r.nextInt(10)+1);
    if(!list.contains(tmp))
        list.add(tmp);
}
list.sort((obj1,obj2)->{
    return obj1.compareTo(obj2);   //去调用obj1所属类中定义的方法
});
list.forEach(System.out::println);

注意:由于使用contains进行存在性判断,所需类中应该提供equals方法,但是不会使用hashCode方法

最终排序是通过自定义的Comparator比较器实现的

举报

相关推荐

0 条评论