TreeSet实现类中的元素是无序的,但是可以按照一定的顺序遍历,当我们自定义一个类,就需要用Comparable接口或者Comparator接口覆写其中的方法来实现元素之间的比较排序。
用Person类为例(需要覆写hashCode()和equals()方法)
**
**
第一步,Person类implements接口
第二步,在Person类中覆写compareTo()方法
//在Person类中覆写
@Override
public int compareTo(Object o) {
if(o instanceof Person){
Person person=(Person)o;
//return this.age-person.age;
// int型对象没有方法,所以只能返回运算;如果Integer age,可以用return this.age.compareTo(person.age)
int i=this.age.compareTo(person.age);
if(i==0){
return this.name.compareTo(person.name);
}else
return i;
}
return 0;
}
(1)内部类写法
public class TreeSetTest {
@Test
public void test() {
Comparator com=new Comparator(){
@Override
public int compare(Object o1, Object o2) {
if(o1 instanceof Person && o2 instanceof Person){
Person person1=(Person)o1;
Person person2=(Person)o2;
int i=person1.getAge().compareTo(person2.getAge());
if(i==0){
return person1.getName().compareTo(person2.getName());
}else
return i;
}
return 0;
}
};
Set set=new TreeSet(com);
set.add(new Person("张三",18));
set.add(new Person("李四",15));
set.add(new Person("王五",20));
set.add(new Person("王六",20));
set.add(new Person("朱六",19));
set.add(new Person("赵钱",23));
Iterator iterator=set.iterator();
while(iterator.hasNext()){
System.out.println(iterator.next());
}
}
}
自定义一个MyComparator类implements Comparator
class MyComparator implements Comparator{
@Override
public int compare(Object o1, Object o2) {
if(o1 instanceof Person && o2 instanceof Person){
Person person1=(Person)o1;
Person person2=(Person)o2;
int i=person1.getAge().compareTo(person2.getAge());
if(i==0){
return person1.getName().compareTo(person2.getName());
}else
return i;
}
return 0;
}
}
public class TreeSetTest {
@Test
public void test() {
MyComparator mcom=new MyComparator();
Set set=new TreeSet(mcom);
set.add(new Person("张三",18));
set.add(new Person("李四",15));
set.add(new Person("王五",20));
set.add(new Person("王六",20));
set.add(new Person("朱六",19));
set.add(new Person("赵钱",23));
Iterator iterator=set.iterator();
while(iterator.hasNext()){
System.out.println(iterator.next());
}
}
}