ComparableとComparatorによる集合ソート

6539 ワード

ソートの実装方法
  • はCollectionsを通過しなければならない.sort()実装
  • 区別する
  • ComparableはCollectionを介しています.sort(obj),objはComparableインタフェースを実現し,comparareTo(T o)メソッドを複写し,戻り値が正,ゼロ,負に基づいてソートを実現する.
  • の戻り値は正であり、呼び出しオブジェクトは入力オブジェクトよりも大きい.
  • の戻り値は負であり、呼び出しオブジェクトは入力オブジェクトより小さい
  • である.
  • の戻り値はゼロで、
  • に等しい.

    コード#コード#
    需要:-学生をソートします.-まず成績順に昇順し、成績は同じで、年齢順にソートします.-Comparableインタフェースで実現
    //  Bean
    public class Student implements Comparable{
        private String name;
        private int age;
        private int score;
    
        public Student(String name,int age,int score){
            this.name = name;
            this.age = age;
            this.score = score;
        }
        public Student(){}
    
        //get set toString      
    
        @override
        public int compareTo(Student s1){
            //       this   ,         
            if(this.score > s1.getScore()){
                return 1;
            }else if(this.score == s1.getScore()){
                //        ,    ,this      -1
                if(this.age > s1.getAge()){
                    return -1;
                }else{
                    return 1;
                }
            }else{
                return -1;
            }
        }
    }
    
    public class sortStudent{
        public static void main(String[] args){
            ArrayList list = new ArrayList<>();
            list.add(new Student("zhangsan",18,90));
            list.add(new Student("lisi",19,60));
            list.add(new Student("wangwu",16,100));
            list.add(new Student("zhaoliu",17,90));
            Collections.sort(list);
        }
    }
    //  
    {name='lisi', age=19, score=60}
    {name='zhangsan', age=18, score=90}
    {name='zhaoliu', age=17, score=90}
    {name='wangwu', age=16, score=100}
    

    Comparableは堅苦しいので柔軟ではありません.
  • ComparatorはCollectionsを通過する.sort(List list,Comparator

  • コード#コード#
    public class StringSortTest5 {
        public static void main(String[] args) {
    
            ArrayList list = new ArrayList<>();
    
            list.add("Peter");
            list.add("Jim");
            list.add("Ann");
            list.add("Angel Baby");
            list.add("Michel Jackson");
            list.add("JK");
            list.add("Tom");
            list.add("Jerry");
            //         
            Collections.sort(list, new
            Comparator() {
                @Override
                public int compare(String o1, String o2) {
                    //    :             
                    int result = o1.length()-o2.length();
                    if(result==0){
                        result =o1.compareTo(o2);
                    }
                    return result;
                }
            });

    集合はソートを実現したい,1.Collectionsしかないsort()メソッド実装,2.あるいはHashSetで実現します.
    配列ソート
  • Arrays.sort()は集合ソートと同じ