TreeSet实现自定义排序

import java.util.*;
/*
** 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;
}

}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值