TreeSetおよびストレージカスタムクラス書き換えcompareTo()続き
5810 ワード
TreeSetカスタムクラスストレージ(コンパレータを使用)
TreeSetに要素を追加する場合、要素自体が自然な順序の特性を備えておらず、要素が属するクラスもcomparableインタフェースを実装していない場合は、TreeSetを作成するときに比較器を入力する必要があります.
コンパレータのカスタマイズ方法:クラス実装comparatorインタフェースをカスタマイズし、要素と要素の比較規則をcompareメソッド内に定義すればよい.
カスタムコンパレータのフォーマット:
例:まず従業員クラスを定義します.
次にコンパレータをカスタマイズします
treesetクラスの作成
出力結果は、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]
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]