List的排序问题
1.List排序方法
List的父接口Collections里为我们提供了两种方法:
1.1.List的里面的类型实现Comparable接口
1.2.在排序时传入Comparator的实例
static <T extends Comparable<? super T>> void sort(List<T> list)
static <T> void sort(List<T> list, Comparator<? super T> c)
2.具体实例
下面展示第一种方式
2.1首先定义一个实体类实现 Comparable
接口,同时必须实现排序方法 compareTo
!!!!!!注意排序正序时:1.this 大返回正数,2. this小返回负数 ,3相等返回0,此处示例为int可以直接相比较
下面是List里需要传入的类型
class Person implements Comparable<Person>{
private int age;
private String name;
public Person(){};
public Person(String name,int age){
this.age=age;
this.name=name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
//实现Comparable的比较方法
@Override
public int compareTo(Person o) {
return this.age-o.age;
}
@Override
public String toString() {
return "Person{" +
"age=" + age +
", name='" + name + '\'' +
'}';
}
}
2.2然后我们运行
public static void main(String[] args) {
List<Person> list =new ArrayList<Person>();
list.add(new Person("t1",20));
list.add(new Person("t2",15));
list.add(new Person("t3",25));
System.out.println("排序前");
for(Person p:list)
{
System.out.println(p);
}
Collections.sort(list);
System.out.println("排序后");
for(Person p:list)
{
System.out.println(p);
}
}
运行结果为:
2.3 在排序时传入Comparator的实例
下面展示Person类。
class Person {
private int age;
private String name;
public Person(){};
public Person(String name,int age){
this.age=age;
this.name=name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "Person{" +
"age=" + age +
", name='" + name + '\'' +
'}';
}
}
2.4 排序方法:在sort()方法中第二个参数传入一个Comparator的实例
public static void main(String[] args) {
List<Person> list =new ArrayList<Person>();
list.add(new Person("t1",20));
list.add(new Person("t2",15));
list.add(new Person("t3",25));
System.out.println("排序前");
for(Person p:list)
{
System.out.println(p);
}
//此处排序
Collections.sort(list,new Comparator<Person>(){
@Override
public int compare(Person o1, Person o2) {
return o1.getAge()-o2.getAge();
}
});
System.out.println("排序后");
for(Person p:list)
{
System.out.println(p);
}
}
排序结果为: