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

来源:互联网 发布:python谷歌浏览器驱动 编辑:程序博客网 时间:2024/06/07 19:19

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

首先我们先从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
原创粉丝点击