大家在操作集合的时候往往没在意一些方法的底层实现,各种集合判断的方式不一样,这取决于他们的存储方式,比如TreeSet集合如何判断相同元素的呢?contains方法和remove方法在底层都调用了这些方法
下面看具体的例子: 假设我们以年龄和姓名相同的为同一个人
import java.util.*;
class TreeSetDemo
{
public static void main(String[] args)
{
TreeSet<Person> ts=new TreeSet<Person>(new MyComparator());
ts.add(new Person("pengbin02",20));
ts.add(new Person("pengbin05",20));
ts.add(new Person("pengbin03",30));
ts.add(new Person("pengbin03",40));
Iterator<Person> it=ts.iterator();
while(it.hasNext())
{
Person p=it.next();
System.out.println(p.getName()+"...."+p.getAge());
}
}
}
class Person implements Comparable<Person>
{
private String name;
private int age;
public Person(String name,int age)
{
this.name=name;
this.age=age;
}
public String getName()
{
return name;
}
public int getAge()
{
return age;
}
/*
定义一个方法按照年龄排序(从小到大),如果年龄相同则按照姓名排序
*/
public int compareTo(Person p)
{
/*if(this.age>p.age)
return 1;
if(this.age==p.age)
return this.name.compareTo(p.name);
return -1;*/
System.out.println(this.name+"...compareto..."+p.name);
int num=new Integer(this.age).compareTo(new Integer(p.age));
if(num==0)
return this.name.compareTo(p.name);
return num;
}
}
/*
定义一个比较器
*/
class MyComparator implements Comparator<Person>
{
/*
覆盖Comparator的compare方法,按照姓名排序
,如果姓名相同则按照年龄排序(从小到大)
*/
public int compare(Person p1,Person p2)
{
int num=p1.getName().compareTo(p2.getName());
if(num==0)
return new Integer(p1.getAge()).compareTo(new Integer(p2.getAge()));
return num;
}
}
|