黑马程序员技术交流社区

标题: Java集合的排序(sort)问题 [打印本页]

作者: pzfpang449    时间: 2013-1-30 14:41
标题: Java集合的排序(sort)问题
本帖最后由 张向辉 于 2013-2-2 10:40 编辑

在Java Collection Framework中定义的List实现有Vector,ArrayList和LinkedList。这些集合提供了对对象组的索引访问。他们提供了元素的添加与删除支持。然而,它们并没有内置的元素排序支持。
  你能够使用java.util.Collections类中的sort()方法对List元素进行排序。你既可以给方法传递一个List对象,也可以传递一个List和一个Comparator。如果列表中的元素全都是相同类型的类,并且这个类实现了Comparable接口,你可以简单的调用 Collections.sort()。
     如果这个类没有实现Comparator,如何来解决?希望高手帮忙。
     顺便也秋下技术分,还差2分就可以入学考试了,希望版主给些技术分,谢谢!
作者: 黑马张英涛    时间: 2013-1-30 15:19
同时实现了自身实现Comparable和传递比较器排序的方式。

public class MyTest {

    /**
     *
     * @param args
     */

    public static void main(String[] args) {

            Student s1=new Student("abc",77);
            Student s2=new Student("bdc",65);
            Student s3=new Student("abe",65);
            Student s4=new Student("cac",90);

            List<Student> list=new ArrayList<Student>();
            list.add(s1);
            list.add(s2);
            list.add(s3);
            list.add(s4);

            for(Student s : list){        //存入集合的顺序
                    System.out.println(s.name+":"+s.score);
            }

            System.out.println("=============================");

            Collections.sort(list);                                //使用对象自身的排序方式
            for(Student s : list){
                    System.out.println(s.name+":"+s.score);
            }

            System.out.println("=============================");

            Collections.sort(list, new MyComparator());        //按照比较器指定的方式排序
            for(Student s : list){
                    System.out.println(s.name+":"+s.score);
            }

    }

}
class Student implements Comparable<Student>{
    public String name;
    public int score;

    public Student(String name,int score){
            this.name=name;
            this.score=score;
    }

        @Override
        public int compareTo(Student o) {
                if(this.score==o.score)        //分数相等就按照名字的自然顺序
            return this.name.compareTo(o.name);               
    else
            return this.score-o.score;         //按照分数的自然顺序
        }

}
class MyComparator implements Comparator<Student>{

    @Override
    public int compare(Student o1, Student o2) {
            if(o1.score==o2.score)        //如果分数相等就按照名字比较的反序
                    return -o1.name.compareTo(o2.name);               
            else
                    return o2.score-o1.score; //按照分数大小的反序比较
    }        
}

作者: Rancho_Gump    时间: 2013-2-2 10:38
public static <T extends Comparable<? super T>> void sort(List<T> list)根据元素的自然顺序 对指定列表按升序进行排序。列表中的所有元素都必须实现 Comparable 接口。此外,列表中的所有元素都必须是可相互比较的(也就是说,对于列表中的任何 e1 和 e2 元素,e1.compareTo(e2) 不得抛出 ClassCastException)。
文档说的很清楚,不建议以刷分为目的而发帖!




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2