利用Java中的现有方法实现对集合元素进行排序。
(1) Collections.sort(集合名); 如果参与排序的集合中存储的是自定义类型的对象,则对象对应类需要实现java.lang.Comparable接口,同时实现接口中 compareTo(Tt)方法指定排序规则。—》内置比较器。
public class TestSort { public static void main(String[] args) { ArrayList<Student> list = new ArrayList<Student> (); list.add(new Student("zihao",38,99.0)); list.add(new Student("jingjing",18,95.0)); list.add(new Student("zihang",48,89.0)); list.add(new Student("zibo", 42, 88.0)); list.add(new Student("jintao", 42, 90.0)); list.add(new Student("wenwen", 42, 89.0)); list.add(new Student("awei", 42, 89.0)); Collections.sort(list); for(Student s:list) { System.out.println(s); } } } public class Student implements Comparable<Student>{ private String name; private Integer age; private Double score; public Student() { super(); } public Student(String name,Integer age,Double score) { super(); this.name = name; this.age = age; this.score = score; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } public Double getScore() { return score; } public void setScore(Double score) { this.score = score; } @Override public String toString() { return "Student [name=" + name + ", age=" + age + ", score=" + score + "]"; } @ Override public int compareTo(Student s) { /* 将 this 和 s 对象进行比较 * 指定排序规则:age * this.age 大于 s.age 1 * this.age 小于 s.age -1 * this.age 等 于 s.age 0 * 如果年龄相同时,再按照 成绩进行 排序 */ if(this.age > s.age) { return 1; }else if(this.age<s.age) { return -1; }else { // return 0; if(this.score>s.score) { return 1; }else if(this.score<s.score) { return -1; }else { // return 0; return this.name.compareTo(s.name); } } } }
(2) List接口中提供 默认方法 sort(Comparator c):如果参与排序的集合存储的是自定义类型的对象,则需要在参与比较的对象以外的地方定义一个匿名内部类(或是Lambda表达式)实现 java.util.Comparator接口,同时实现 compare(T t1,Tt2)方法指定排序规则。—》外置比较器.
public class TestSort2 { public static void main(String[] args) { List<Worker> list = new ArrayList<Worker>(); list.add(new Worker("zihao",38,20000.0)); list.add(new Worker("awei",35,19000.0)); list.add(new Worker("xingwang",48,25000.0)); list.add(new Worker("jintao",37,18000.0)); // 制定的比较规则 -->匿名内部类 // Comparator<Worker> c = new Comparator<Worker>() { // public int compare(Worker w1,Workerw2) { // /* 将 w1 和 w2进行 比较:按照年龄 // * w1.age 大于w2.age 1 // * w1.age 小于w2.age -1 // * 等于0 // */ // if(w1.getAge()>w2.getAge()) { // return 1; // }else if(w1.getAge()<w2.getAge()) { // return -1; // }else { // return 0; // } // } // }; // Lambda表达式 Comparator<Worker> c = (w1,w2) ->{ if(w1.getAge()>w2.getAge()) { return 1; }else if(w1.getAge()<w2.getAge()) { return -1; }else { return 0; } }; list.sort(c); for(Worker w:list) { System.out.println(w); } } } public class Worker { private String name; private Integer age; private Double salary; public Worker() { super(); } public Worker(String name,Integer age,Double salary) { super(); this.name = name; this.age = age; this.salary = salary; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } public Double getSalary() { return salary; } public void setSalary(Double salary) { this.salary = salary; } @Override public String toString() { return "Worker [name=" + name + ", age=" + age + ", salary=" + salary + "]"; } }
补充:
Collections工具类
(1) 位于java.util包中对集合元素进行操作的工具类。
(2) 功能方法:
a. static void reverse(List list):将集合中元素进行倒置
b. static void shuffle(List list):对集合中元素进行随机显示
c. static void sort(List list):对集合元素进行排序。
注:如果参与排序的集合中存储的是自定义类型的对象,则对象对应类需要实现java.lang.Comparable接口,同时实现接口中 compareTo方法指定排序规则。