arraylist排序问题
使用Sort方法,可以对集合中的元素进行排序。Sort有三种重载方法,声明代码如下所示。
public void Sort();
//使用集合元素的比较方式进行排序
public void Sort(IComparer comparer);
//使用自定义比较器进行排序
public void Sort(int index, int count, IComparer comparer)
//使用自定义比较器进行指定范围的排序
注意:为使用Sort方法进行排序,集合中的所有元素必须实现IComparable接口,否则,将抛出异常,此外,可使用reverse方法进行倒序排列。
首先对元素的排列:
public static void main(String[] args) { // System.out.println("集合转数组"); // convertCollectionToArray(); // System.out.println(); // System.out.println("数组转集合"); // convertArrayToCollection(); System.out.println("数组排序(元素)"); elementsSort(); System.err.println(); System.out.println("数组排序(对象)"); objectSort(); } public static void elementsSort() { ArrayList list = new ArrayList(); list.add(835); list.add(55); list.add(0); list.add(15); list.add(96); list.add(-9); System.out.println("正常初始顺序-->>>" + list.toString()); Collections.sort(list); System.out.println("排序后 -->>>" + list.toString()); Collections.reverse(list); System.out.println("排序后倒序-->>>" + list.toString()); } public static void objectSort() { Comparator<Student> comparator = new Comparator<Student>() { public int compare(Student s1, Student s2) { if (s1.age != s2.age) {// 先排年龄 return s1.age - s2.age; } else {// 年龄相同则按姓名排序 if (!s1.name.equals(s2.name)) { return s1.name.compareTo(s2.name); } else {// 姓名也相同则按学号排序 return s1.id - s2.id; } } } }; Student stu1 = new Student(1, "zhangsan", "male", 28, "cs"); Student stu2 = new Student(2, "lisi", "female", 19, "cs"); Student stu3 = new Student(3, "wangwu", "male", 22, "cs"); Student stu4 = new Student(4, "zhaoliu", "female", 17, "cs"); Student stu5 = new Student(5, "jiaoming", "male", 22, "cs"); ArrayList<Student> List = new ArrayList<Student>(); List.add(stu1); List.add(stu2); List.add(stu3); List.add(stu4); List.add(stu5); // 这里就会自动根据规则进行排序 Collections.sort(List, comparator); for (int i = 0; i < List.size(); i++) { System.out.println("--->>>"+List.get(i).name); } } private static class Student { int age; int id; String gender; String name; String cs; Student(int id, String name, String gender, int age, String cs) { this.age = age; this.name = name; this.gender = gender; this.id = id; this.cs = cs; } public String toString() { return id + " " + name + " " + gender + " " + age + " " + cs; } }
打印结果如下:
数组排序(元素) 正常初始顺序-->>>[835, 55, 0, 15, 96, -9] 排序后 -->>>[-9, 0, 15, 55, 96, 835] 排序后倒序-->>>[835, 96, 55, 15, 0, -9] 数组排序(对象) --->>>zhaoliu --->>>lisi --->>>jiaoming --->>>wangwu --->>>zhangsan