セットTreeSetの要素が順序付けられていることを特徴とのみ
TreeSetのオブジェクトを作成するときに、比較ルールを設定する必要があります
2つの方法で比較ルールセット:一つは内部匹敵する比較ルールにより、外部コンパレータ比較ルールセット、他のセットを使用することです
同等の内部コンパレータ
public class Person implements Comparable<Person>{
@Override
public int compareTo(Person o) {
//return this.name.compareTo(o.getName());
//return this.name.length()-o.getName().length();
return this.age-o.getAge();
}
}
コンパレータ外部コンパレータ
public class AgeCom implements Comparator<Person> {
@Override
public int compare(Person o1, Person o2) {
return o1.getAge()-o2.getAge();
}
}
図1に示すように、クラスを作成すると同時に、内部コンパレータのルールを作成します
package com.wyq.Arr;
public class Pers implements Comparable<Pers>{
/**
* person类实现了Compatator接口
* 那么他具备一种能力,就是比较的能力
*/
private String name;
private Gender gender;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Gender getGender() {
return gender;
}
public void setGender(Gender gender) {
this.gender = gender;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public Pers(String name, Gender gender, int age) {
super();
this.name = name;
this.gender = gender;
this.age = age;
}
public Pers() {
super();
}
@Override
public int compareTo(Pers o) {
//按照年龄进行比较
// return this.age-o.getAge();
//字母的升序进行比较
// return this.name.compareTo(o.getName());
//按照字母的长度进行比较
return this.name.length()-o.getName().length();
}
}
2、外部の比較ルールを作成します
package com.wyq.Arr;
import java.util.Comparator;
public class AgeCom implements Comparator<Pers>{
@Override
public int compare(Pers o1, Pers o2) {
return o1.getAge()-o2.getAge();
}
}
3、テストクラスを作成します
package com.wyq.Arr;
import java.util.TreeSet;
public class TestPers {
public static void main(String[] args) {
//创建treeset对象的集合,明确了存储的对象的类型只能是pers类型
TreeSet<Pers> ts = new TreeSet<Pers>(new AgeCom());
/**
* 因为TreeSet集合存储的元素的特点是:有序,唯一
* 需要存储的对象要具备比较规则
* 如果存储的自定义对象,不具备比较规则,那么程序就将产生类型转换异常
*/
Pers p1 = new Pers("张三",Gender.女,30);
Pers p2 = new Pers("李四",Gender.男,32);
Pers p3 = new Pers("王五",Gender.女,31);
Pers p4 = new Pers("马六",Gender.男,20);
ts.add(p1);
ts.add(p2);
ts.add(p3);
ts.add(p4);
System.out.println(ts.size());
for(Pers str:ts){
System.out.println(ts);
}
}
}
トップコード内部および外部のルール比較ルールの比較を設定して、TreeSetのオブジェクトを作成するが、両方が同時に発生した場合に、外部パリティより優先ルール場合。