/*
** TreeSet排序方式
** 1.元素实现Comparable接口,具备可比性
** 2.new TreeSet(Comparable com); //内部类
*/
public class TreeDemo
{
public static void main(String args[]){
sortMethod2();
}
//利用treeset构造函数传入比较方法
public static void sortMethod2(){
TreeSet ts = new TreeSet(new Comparator()
{
public int compare(Object obj1,Object obj2){
Person2 p1 = (Person2) obj1;
Person2 p2 = (Person2) obj2;
int num = p1.getName().compareTo(p2.getName());
return num==0?p1.getAge().compareTo(p2.getAge()):num;
}
}
);
ts.add(new Person2("zhangsan",28));
ts.add(new Person2("lisi",21));
ts.add(new Person2("zhouqi",29));
ts.add(new Person2("zhouqi",25));
ts.add(new Person2("wangu",24));
Iterator it = ts.iterator();
while(it.hasNext()){
Person2 p = (Person2)it.next();
System.out.println(p.getName()+":"+p.getAge());
}
}
//对象具备comparator接口,具备比较性
public static void sortMethod1(){
TreeSet ts = new TreeSet();
ts.add(new Person("zhangsan",28));
ts.add(new Person("lisi",21));
ts.add(new Person("zhouqi",29));
ts.add(new Person("zhouqi",25));
ts.add(new Person("wangu",24));
Iterator it = ts.iterator();
while(it.hasNext()){
Person p = (Person)it.next();
System.out.println(p.getName()+":"+p.getAge());
}
}
}
//利用treeset构造函数传入比较方法
class CompareByPerson implements Comparator
{
public int compare(Object obj1,Object obj2){
Person p1 = (Person) obj1;
Person p2 = (Person) obj2;
int num = p1.getName().compareTo(p2.getName());
return num==0?p1.getAge().compareTo(p2.getAge()):num;
}
}
class Person2
{
private String name;
private Integer age;
public String getName(){
return name;
}
public Integer getAge(){
return age;
}
public Person2(String name,Integer age){
this.name = name;
this.age = age;
}
public boolean equals(Object obj){
if(!(obj instanceof Person)){
return false;
}
Person2 person = (Person2)obj;
return this.name.equals(person.getName())&&(this.age.compareTo(person.getAge())==0);
}
public int hashCode(){
return name.hashCode() + age;
}
public int compareTo(Object obj){
Person2 person = (Person2)obj;
int num = this.name.compareTo(person.getName());
return (num==0)?this.age.compareTo(person.getAge()):num;
}
}
class Person implements Comparable
{
private String name;
private Integer age;
public String getName(){
return name;
}
public Integer getAge(){
return age;
}
public Person(String name,Integer age){
this.name = name;
this.age = age;
}
public boolean equals(Object obj){
if(!(obj instanceof Person)){
return false;
}
Person person = (Person)obj;
return this.name.equals(person.getName())&&(this.age.compareTo(person.getAge())==0);
}
public int hashCode(){
return name.hashCode() + age;
}
public int compareTo(Object obj){
Person person = (Person)obj;
int num = this.name.compareTo(person.getName());
return (num==0)?this.age.compareTo(person.getAge()):num;
}
}