外部比较器和内部比较器(hashSet以及treeSet里定义唯一性规则)

内部比较器:lang包里的comparable接口    compareTo方法

外部比较器:util包里的comparator接口     compare方法

内部比较器

package set;

public class Person implements Comparable<Person>{
	private String name;
	private int age;
	
	public Person(String name, int age) {
		super();
		this.name = name;
		this.age = age;
	}
	public Person() {
		super();
		// TODO Auto-generated constructor stub
	}
	
	
	@Override
	public int compareTo(Person arg0) {
		// TODO Auto-generated method stub
		return this.age - arg0.age;
	}
	
	
	
	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + age;
		result = prime * result + ((name == null) ? 0 : name.hashCode());
		return result;
	}
	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		Person other = (Person) obj;
		if (age != other.age)
			return false;
		if (name == null) {
			if (other.name != null)
				return false;
		} else if (!name.equals(other.name))
			return false;
		return true;
	}
	@Override
	public String toString() {
		return "Person [name=" + name + ", age=" + age + "]";
	}
	
	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;
	}
	
}

 

import java.util.HashSet;
import java.util.TreeSet;

public class Test {
	public static void main(String[] args) {
		HashSet<Person> set = new HashSet<Person>();
		set.add(new Person("旺财", 1));
		set.add(new Person("旺财", 1));
		set.add(new Person("旺财2", 2));
		//System.out.println(set);
		
		/**
		 * 当需要将自定义的类存放到TreeSet中,需要制定比较大小的规则
		 * 制定比较大小的规则有两种方式
		 * 1,内部比较器,就是在Person的类实现Comparable接口 
		 * 		重写compareTo的方法
		 * 2,单独创建一个类  实现Comparator的接口   
		 * 		实现compare的方法来比较大小
		 * 
		 */
		TreeSet<Person> treeSet = new TreeSet<Person>();
		treeSet.add(new Person("旺财1",5));
		treeSet.add(new Person("旺财2",15));
		treeSet.add(new Person("旺财3",1));
		treeSet.add(new Person("旺财4",2));
		//System.out.println(treeSet);
		
		
		
		TreeSet<Dog> treeSet2 = new TreeSet<Dog>(new DogSort());
		treeSet2.add(new Dog("旺财1", 1));
		treeSet2.add(new Dog("旺财2", 5));
		treeSet2.add(new Dog("旺财3", 2));
		treeSet2.add(new Dog("旺财4", 4));
		System.out.println(treeSet2);
	}
}

 

外部比较器

public class Dog {
	private String name;
	private int age;
	public Dog() {
		super();
		// TODO Auto-generated constructor stub
	}
	public Dog(String name, int age) {
		super();
		this.name = name;
		this.age = age;
	}
	@Override
	public String toString() {
		return "Dog [name=" + name + ", age=" + age + "]";
	}
	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;
	}
	
}

 

import java.util.Comparator;

public class DogSort implements Comparator<Dog>{

	@Override
	public int compare(Dog d1, Dog d2) {
		
		return d1.getAge() - d2.getAge();
	}
	

}

 

import java.util.HashSet;
import java.util.TreeSet;

public class Test {
	public static void main(String[] args) {
		HashSet<Person> set = new HashSet<Person>();
		set.add(new Person("旺财", 1));
		set.add(new Person("旺财", 1));
		set.add(new Person("旺财2", 2));
		//System.out.println(set);
		
		/**
		 * 当需要将自定义的类存放到TreeSet中,需要制定比较大小的规则
		 * 制定比较大小的规则有两种方式
		 * 1,内部比较器,就是在Person的类实现Comparable接口 
		 * 		重写compareTo的方法
		 * 2,单独创建一个类  实现Comparator的接口   
		 * 		实现compare的方法来比较大小
		 * 
		 */
		TreeSet<Person> treeSet = new TreeSet<Person>();
		treeSet.add(new Person("旺财1",5));
		treeSet.add(new Person("旺财2",15));
		treeSet.add(new Person("旺财3",1));
		treeSet.add(new Person("旺财4",2));
		//System.out.println(treeSet);
		
		
		
		TreeSet<Dog> treeSet2 = new TreeSet<Dog>(new DogSort());
		treeSet2.add(new Dog("旺财1", 1));
		treeSet2.add(new Dog("旺财2", 5));
		treeSet2.add(new Dog("旺财3", 2));
		treeSet2.add(new Dog("旺财4", 4));
		System.out.println(treeSet2);
	}
}

 

posted @ 2019-10-04 23:18  我今天也很帅  阅读(456)  评论(0)    收藏  举报