集合排序
List集合排序
- 方法一:
借助Collections工具类静态方法sort :Collections.sort();集合元素需要实现自然排序接口
要求:集合元素实现了自然排序接口Comparable
实例:
public class User implements Comparable<User> {
private String username;
private int age;
private int grade;
public User(String username, int age, int grade) {
this.username = username;
this.age = age;
this.grade = grade;
}
public int compareTo(User o) {
int num;
//this:第二个元素,o :第一个元素
if (this.age==o.getAge()){
num = this.grade - o.getGrade();
System.out.println(num);
}else {
num = this.age - o.getAge();
}
return num;
// return 1; 正数 顺序排序;负数 逆序排序;0 相同
User user1 = new User("lili",15,8);
User user2 = new User("jiji",15,9);
User user3 = new User("kiki",13,8);
List<User> list1 = new ArrayList<User>();
list1.add(user1);
list1.add(user2);
list1.add(user3);
Collections.sort(list1);
- 方法二:
借助Collections工具类静态方法sort :Collections.sort();传递一个Comparator排序器
User user1 = new User("lili",15,8);
User user2 = new User("jiji",15,9);
User user3 = new User("kiki",13,8);
List<User> list1 = new ArrayList<User>();
list1.add(user1);
list1.add(user2);
list1.add(user3);
Collections.sort(list1, new Comparator<User>() {
public int compare(User o1, User o2) {
System.out.println(o1 +"==="+ o2);
int num;
if (o1.getAge()==o2.getAge()){
num = o1.getGrade()-o2.getGrade();
}else {
num = o1.getAge() - o2.getAge();
}
return num;//正数 顺序排序;负数 逆序排序;0 相同
}
});
set集合排序
- TreeSet排序
同List 两种方法类似,只是不需要借助于Collections 工具类,集合在添加元素时,就完成了排序和去重。
方法一:同list Comparable类似
public class User implements Comparable<User> {
private String username;
private int age;
private int grade;
public User(String username, int age, int grade) {
this.username = username;
this.age = age;
this.grade = grade;
}
@Override
public int compareTo(User o) {
int num;
if (this.age==o.getAge()){
num = this.grade - o.getGrade();
System.out.println(num);
}else {
num = this.age - o.getAge();
}
return num;
// return 1; 正数 顺序排序;负数 逆序排序;0 重复不添加
}
Set<User> users = new TreeSet<User>();
User user1 = new User("lili",15,8);
User user2 = new User("jiji",13,8);
User user3 = new User("kiki",13,8);
users.add(user1);
users.add(user2);
users.add(user3);
方法二:同list方法二类似
Set<User> users = new TreeSet<User>(new Comparator<User>() {
@Override
public int compare(User o1, User o2) {
int num;
if (o1.getAge()==o2.getAge()){
num = o1.getGrade()-o2.getGrade();
}else {
num = o1.getAge()-o2.getAge();
}
return num;
}
});
User user1 = new User("lili",15,8);
User user2 = new User("jiji",13,8);
User user3 = new User("kiki",13,8);
users.add(user1);
users.add(user2);
users.add(user3);
- TreeSet 排序
TreeSet排序只能先转换成可以排序的List或HashSet集合,然后再排序
HashSet<User> hashSet = new HashSet<User>();
ArrayList arrayList = new ArrayList<User>(hashSet);
TreeSet<User> treeSet = new TreeSet<>(hashSet);