1. Comparable方式
List元素实现Comparable接口
1.1. 简单元素
适用类型:
Byte,Short,Integer,Long,Float,Double,Character,String,Date等类型都实现了Comparable接口,对于List的这些类型的元素,可以直接用Collections.sort(list)进行排序。
示例:
package test;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
/**
* @author sunzl
* @date 2018年10月14日
*
*/
public class IntegerSortTest {
public static void main(String[] args) {
List<Integer> list = new ArrayList<Integer>();
list.add(3);
list.add(2);
list.add(1);
Collections.sort(list);//正序
// Collections.reverse(list); //倒序
for (Integer i : list) {
System.out.println(i);
}
}
}
输出结果:1 2 3
1.2. 自定义对象类型元素
对象User,实现Comparable接口,重新compareTo方法:
package test;
/**
* @author sunzl
* @date 2018年10月14日
*
*/
public class User implements Comparable<User>{
private String name;
private int age;
/**
* @param name
* @param age
*/
public User(String name, int age) {
super();
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "User [name=" + name + ", age=" + age + "]";
}
@Override
public int compareTo(User o) {
int i = this.getAge() - o.getAge();
//先根据age排序,age相同再根据name排序
i = i == 0 ? this.name.compareTo(o.getName()) : i;
return i;
}
}
测试类:UserSortTest
package test;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
/**
* @author sunzl
* @date 2018年10月14日
*
*/
public class UserSortTest {
public static void main(String[] args) {
List<User> list = new ArrayList<User>();
list.add(new User("Jack", 25));
list.add(new User("Allen", 25));
list.add(new User("Mary", 23));
list.add(new User("Tom", 24));
Collections.sort(list);
for (User user : list) {
System.out.println(user.toString());
}
}
}
测试输出:
User [name=Mary, age=23]
User [name=Tom, age=24]
User [name=Allen, age=25]
User [name=Jack, age=25]
2. Comparator方式
使用 Collections的 public static <T> void sort(List<T> list, Comparator<? super T> c)排序方式,新建Comparator类,并实现compare方法
对象Customer:
package test;
/**
* @author sunzl
* @date 2018年10月14日
*
*/
public class Customer{
private String name;
private int age;
/**
* @param name
* @param age
*/
public Customer(String name, int age) {
super();
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "Customer [name=" + name + ", age=" + age + "]";
}
}
测试类:
package test;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
/**
* @author sunzl
* @date 2018年10月14日
*
*/
public class CustomerSortTest {
public static void main(String[] args) {
List<Customer> list = new ArrayList<Customer>();
list.add(new Customer("Jack", 25));
list.add(new Customer("Allen", 25));
list.add(new Customer("Mary", 23));
list.add(new Customer("Tom", 24));
Collections.sort(list, new Comparator<Customer>() {
@Override
public int compare(Customer o1, Customer o2) {
int i = o1.getAge() - o2.getAge();
//先根据age排序,age相同再根据name排序
i = i == 0 ? o1.getName().compareTo(o2.getName()) : i;
return i;
}
});
for (Customer customer : list) {
System.out.println(customer.toString());
}
}
}
测试输出:
Customer [name=Mary, age=23]
Customer [name=Tom, age=24]
Customer [name=Allen, age=25]
Customer [name=Jack, age=25]