Set有两个子类:
|- HashSet
|- 请参看[url=http://bbs.itheima.com/thread-170-1-1.html]HashSet详述[/url]
|- TreeSet
|- TreeSet中保存的每个元素,都必须实现了Comparable接口。 而消除重复的元素,是通过接口中的CompareTo方法来完成的。
public int compareTo(T o)
|- 如果compareTo()方法返回0 则意味着正在比较的2个对象相等。
|- 而两个对象相等在Set中是不允许出现的。
|- 因此 重写compareTo()方法时 要将对象的所有字段都进行比较。
|- 要保证只有在两个对象的各个属性的值都相同的情况下,咱们才返回0。否则就返回1或-1。
|- 返回一个大于0的数 意味着 需要将当前对象和参数对象交换位置。
|- 返回一个小于0的数 意味着 不需要将当前对象和参数对象交换位置。
看看Person类:[code=java]package org.cxy.demo;
public 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 void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public int compareTo(Person arg0) {
int result = this.name.compareTo(arg0.getName());
// 若姓名相同,则按照年龄从大到小排序。
if( result == 0){
result = arg0.getAge() - this.age ;
}
return result;
}
public String toString(){
return "姓名:"+this.name+",年龄:"+this.age;
}
}[/code]测试类代码:[code=java]package org.cxy.demo;
import java.util.*;
public class Demo {
public static void main(String[] args){
TreeSet<Person> set = new TreeSet<Person>();
set.add(new Person("No-5",20));
set.add(new Person("No-5",25));
set.add(new Person("No-1",30));
System.out.println(set);
}
}[/code]当姓名相同时,按照年龄从大到小排序。 否则就按照姓名从小到大排序。
程序运行结果:[code=java][姓名:No-1,年龄:30, 姓名:No-5,年龄:25, 姓名:No-5,年龄:20][/code] |