- 如果使用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比较器实现的