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

 

posted @ 2014-10-20 15:47  寡蛋  阅读(1455)  评论(0)    收藏  举报