往TreeMap和TreeSet里添加自定义对象的两种比较方法

这个问题之前有点乱,下面我们详细来说一下

首先我们先从set说起,set集合的特点就是不可以存重复的数据,那么我们只需要equals方法就可以,
那么需要在公司类中重写equals方法。如果补充协议equals方法的话,其实就是他们的地址比较。

对于Treeset和TreeMap,除了比较相等,我们还需要排序。我们有两种方式,
一是company类实现comparable接口,重写compareTo方法,
或者是写比较类实现comparactor方法,在集合创建时传递该比较对象。
import java.util.*;
public class Test2 {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        MyComByA com = new MyComByA();
        TreeMap<Company1, String> tm = new TreeMap<Company1, String>();
        Company1 c1 = new Company1("baidu",10010,"aaa",12);
        Company1 c2 = new Company1("baid",10010,"aaa",1);
//      tm.put(c1, "aaa");
//      tm.put(c2, "aaa");

        HashSet<Company1> ts = new HashSet<Company1>();
        ts.add(c1);
        ts.add(c2);
        System.out.println(ts);
    }

}
class MyComByA implements Comparator<Company1>
{
    @Override
    public int compare(Company1 c1, Company1 c2) {
        // TODO Auto-generated method stub
        int n = c1.num - c2.num;
        n = n==0?c1.Founder.compareTo(c2.Founder):n;
        n = n==0?c1.name.compareTo(c2.name):n;
        n = n==0?c1.no-c2.no:n;

        return n;
    }
}
class Company1 {
    String name;
    int num;
    String Founder;
    int no;


    public Company1(String name, int num, String founder, int no) {
        super();
        this.name = name;
        this.num = num;
        Founder = founder;
        this.no = no;
    }
//  public int compareTo(Company1 c){
//      int n = num - c.num;
//      
//      n = n==0?name.compareTo(c.name):n;
//      return n;
//  }
    public boolean equals(Company1 c){
        int n = num - c.num;
        n = n==0?name.compareTo(c.name):n;
        if(n==0)
        return true;
        else return false;
    }
    public String toString(){

        return "姓名:"+name+"  num:"+num+"  "+no+"  "+Founder;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值