パリティルールを設定TreeSetの[外部コンパレータコンパレータは、同等の内部コンパレータで比較]

セット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のオブジェクトを作成するが、両方が同時に発生した場合に、外部パリティより優先ルール場合。

おすすめ

転載: blog.csdn.net/wyqwilliam/article/details/93377947