那要看您是想让程序有何需求 ,还是按什么排序 对排序有什么要求,
对于同时存储有父类和子类的个人感觉还是用比较器方式排序比较好用。
写了一段有子父类存储到TreeSet的小程序
代码示例:- import java.util.Comparator;
- import java.util.Iterator;
- import java.util.TreeSet;
- class Person{ //定义一个人对象
- private int age;
- private String name;
- Person(String name,int age)
- {
- this.name = name;
- this.age= age;
- }
- public String getName()
- {
- return name;
- }
- public int getAge(){
- return age;
- }
- }
- class Student extends Person //定义一个学生对象
- {
- Student(String name,int age){
- super(name,age);
- }
- }
- public class TreeSetTest{
- public static void main(String[] args)
- {
- TreeSet<Person> ts = new TreeSet<Person>(new NameComparator());//将按姓名排序的比较器传给TreeSet构造函数。
- ts.add(new Person("bcds",32));
- ts.add(new Person("liuliu",22));
- ts.add(new Student("asdf",32));
- ts.add(new Student("asdf",42));
- ts.add(new Student("egfds",42));
-
- for(Iterator<Person> it = ts.iterator();it.hasNext();)
- {
- Person p = it.next();
- System.out.println(p.getName()+".."+p.getAge());
- }
- }
- }
- class NameComparator implements Comparator<Person> //用比较器的时候可以比子类也可以比父类,
- //如果同时存储子父类对象的时候,要用父类的泛型进行限定。
- {
- 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;
- }
- }
复制代码 |