这个问题之前有点乱,下面我们详细来说一下
首先我们先从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;
}
}