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

5810 ワード

TreeSetカスタムクラスストレージ(コンパレータを使用)
TreeSetに要素を追加する場合、要素自体が自然な順序の特性を備えておらず、要素が属するクラスもcomparableインタフェースを実装していない場合は、TreeSetを作成するときに比較器を入力する必要があります.
コンパレータのカスタマイズ方法:クラス実装comparatorインタフェースをカスタマイズし、要素と要素の比較規則をcompareメソッド内に定義すればよい.
カスタムコンパレータのフォーマット:
class    implements Comparator {

}

例:まず従業員クラスを定義します.
package com.zzu.java13.treeset;

public class Employment {

    String name;
    int age ; 
    double salary;
    public Employment(String name, int age, double salary) {
        super();
        this.name = name;
        this.age = age;
        this.salary = salary;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public double getSalary() {
        return salary;
    }
    public void setSalary(double salary) {
        this.salary = salary;
    }
    @Override
    public String toString() {
        return "Employment [name=" + name + ", age=" + age + ", salary=" + salary + "]";
    }



}

次にコンパレータをカスタマイズします
package com.zzu.java13.treeset;

import java.util.Comparator;

public class EmpComparator implements Comparator {

    @Override
    public int compare(Object o1, Object o2) {
        Employment e1 = (Employment) o1;
        Employment e2 = (Employment) o2;
        return e1.age-e2.age;

    }

}

treesetクラスの作成
package com.zzu.java13.treeset;

import java.util.Iterator;
import java.util.Set;
import java.util.TreeSet;

public class EmpTreeset {
    public static void main(String[] args) {
        //         
        EmpComparator comparator = new EmpComparator();

        //  treeset        
        Set set = new TreeSet(comparator);

        set.add(new Employment("  ",39,3000));
        set.add(new Employment("  ",45,3000));
        set.add(new Employment("  ",34,3000));
        set.add(new Employment("  ",23,3000));

        Iterator it = set.iterator();
        while(it.hasNext()){
            System.out.println(it.next());
        }

    }

}

出力結果は、Employment[name=趙六、age=23、salary=3000.0]Employment[name=王五、age=34、salary=3000.0]Employment[name=張三、age=39、salary=3000.0]Employment[name=李四、age=45、salary=3000.0]