TreeSetおよびストレージカスタムクラス書き換えcompareTo()

5945 ワード

TreeSet:エレメントが昇順、デフォルトでは自然な順序で配置されている順序付きの集合です.つまり、TreeSetのオブジェクトエレメントはComparableインタフェースを実装する必要があります.
実装原理:赤と黒の木は、親ノードより小さいものを左に、親ノードより大きいものを右に、同じように1つだけ格納し、連続する3つの要素が分岐していない場合、自動的に中間要素をノードとして使用します.これにより、比較回数が減少し、ソート効率が向上します.
TreeSetはカスタムクラスを格納します:TreeSetを使用してカスタムクラスを格納する場合、カスタムクラスでcompareToメソッドを書き換える必要があります.比較形式を提供します.TreeSetではユーザーがカスタマイズしたタイプを正確にツリーソートできません.
例は次のとおりです.まず学生クラスをカスタマイズします.
package com.zzu.java13.treeset;

public class Students implements Comparable{

    String stuNo ; 
    String stuName;
    int score;
    public Students(String stuNo, String stuName, int score) {
        super();
        this.stuNo = stuNo;
        this.stuName = stuName;
        this.score = score;
    }
    @Override
    public String toString() {
        return "Students [stuNo=" + stuNo + ", stuName=" + stuName + ", score=" + score + "]";
    }
    public String getStuNo() {
        return stuNo;
    }
    public void setStuNo(String stuNo) {
        this.stuNo = stuNo;
    }
    public String getStuName() {
        return stuName;
    }
    public void setStuName(String stuName) {
        this.stuName = stuName;
    }
    public int getScore() {
        return score;
    }
    public void setScore(int score) {
        this.score = score;
    }
    @Override
    public int compareTo(Students stu) {
        if(stu!=null){
            if(score == stu.score){
                return stuNo.compareTo(stu.stuNo);
            }
            return score - stu.score;
        }
        return 0;
    }




}

書き換えたcompareTo()は次のとおりです.
public int compareTo(Students stu) {
        if(stu!=null){
            if(score == stu.score){
                return stuNo.compareTo(stu.stuNo);
            }
            return score - stu.score;
        }
        return 0;
    }

TreeSet注意事項:TreeSet注意事項:*1、TreeSetに元素を添加する際、元素が自然順序の特性を備えている場合は、元素の自然順序の特性に従って村粗を並べ替える.*2、TreeSetに要素を追加する場合、要素が自然な順序の特性を備えていない場合、その要素が属するクラスはComparableインタフェースを実現し、要素の比較規則をcompareTo(T o)メソッドに定義しなければならない.*3、要素を比較する場合、compareToメソッドは0を返し、その要素は重複要素と見なされ、追加は許されない(注意:TreeSetとhashCode、equalsメソッドには何の関係もない)
public class TreeSetDemo {

    public static void main(String[] args) {
        Set treeset = new TreeSet();
        treeset.add(new Students("100","  ",58));
        treeset.add(new Students("101","  ",67));
        treeset.add(new Students("102","  ",93));
        treeset.add(new Students("103","  ",89));
        treeset.add(new Students("104","  ",89));
        for(Students stu:treeset){
            System.out.println(stu);
        }
    }

}

出力結果は、Students[stuNo=102,stuName=王五,score=93]Students[stuNo=103,stuName=趙六,score=89]Students[stuNo=104,stuName=韓七,score=89]Students[stuNo=101,stuName=李四,score=67]Students[stuNo=100,stuName=張三,score=58]