android Collections.sort(List<T> list) 与JAVA Collections.sort(List<T> list)

本文通过一个Java实例展示了如何使用Collections.sort方法对自定义类的列表进行排序,并比较了不同环境中排序的结果差异。

Info.java :

public class Info implements Cloneable, Comparable<Info>{
private int id ;
public Info(int id ){
this.id = id ;
}

public int getId() {
return id;
}

@Override
   public Object clone() throws CloneNotSupportedException {
  Info info = (Info) super.clone();
  return info;
   }

@Override
public int compareTo(Info o) {
if(this.id > o.id ){
return 1 ;
}
return 0;
}
}





在JAVA中 Collections.sort(List<T> list) 的测试:


List<Info> list = new ArrayList<Info>() ;
list.add( new Info(3)) ;
list.add( new Info(2)) ;
list.add( new Info(1)) ;
list.add( new Info(4)) ;
list.add( new Info(5)) ;
Collections.sort(list) ;
for(int i = 0 ; i < 5 ; i ++){
System.out.println(list.get(i).getId());
}


结果:

1

2

3

4

5


在android 中 Collections.sort(List<T> list) 的测试:

List<Info> list = new ArrayList<Info>() ;
list.add( new Info(3)) ;
list.add( new Info(2)) ;
list.add( new Info(1)) ;
list.add( new Info(4)) ;
list.add( new Info(5)) ;
Collections.sort(list) ;
for(int i = 0 ; i < 5 ; i ++){
System.out.println(list.get(i).getId());
}


结果:

3

2

1

4

5

在android中实现如果排序的方法可以用Collections.sort(List<T> list, new Comparator<Info>() {

@Override
public int compare(Info lhs, Info rhs) {
return rhs.getId() - lhs.getId();
}
  }

可以实现对list的排序。

`java.util.Collections.sort(java.util.List<T>)` 方法无法应用于 `java.util.List<Circle>` 的原因是因为 `Circle` 类没有实现 `Comparable` 接口,或者没有提供合适的比较器(Comparator)。 `Collections.sort()` 方法有两种主要的重载形式: 1. `Collections.sort(List<T> list)`:这种形式要求列表中的元素实现 `Comparable` 接口,并提供 `compareTo` 方法来定义元素的自然顺序。 2. `Collections.sort(List<T> list, Comparator<? super T> c)`:这种形式允许你提供一个自定义的比较器来定义元素的顺序。 如果 `Circle` 类没有实现 `Comparable` 接口,或者没有提供合适的比较器,编译器就无法确定如何比较 `Circle` 对象,从而导致类型不匹配的错误。 以下是一个示例,展示了如何使 `Circle` 类可比较: ```java import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.List; class Circle { double radius; Circle(double radius) { this.radius = radius; } double getRadius() { return radius; } } // 方法一:让 Circle 实现 Comparable 接口 class CircleComparable implements Comparable<CircleComparable> { double radius; CircleComparable(double radius) { this.radius = radius; } double getRadius() { return radius; } @Override public int compareTo(CircleComparable other) { return Double.compare(this.radius, other.radius); } } // 方法二:使用 Comparator class CircleComparator implements Comparator<Circle> { @Override public int compare(Circle c1, Circle c2) { return Double.compare(c1.getRadius(), c2.getRadius()); } } public class SortCircleExample { public static void main(String[] args) { // 方法一示例 List<CircleComparable> circlesComparable = new ArrayList<>(); circlesComparable.add(new CircleComparable(3.0)); circlesComparable.add(new CircleComparable(1.0)); circlesComparable.add(new CircleComparable(2.0)); Collections.sort(circlesComparable); // 方法二示例 List<Circle> circles = new ArrayList<>(); circles.add(new Circle(3.0)); circles.add(new Circle(1.0)); circles.add(new Circle(2.0)); Collections.sort(circles, new CircleComparator()); // 输出结果 System.out.println("Sorted circles (Comparable):"); for (CircleComparable circle : circlesComparable) { System.out.println(circle.getRadius()); } System.out.println("Sorted circles (Comparator):"); for (Circle circle : circles) { System.out.println(circle.getRadius()); } } } ```
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值