package cn.itcast.generics;
import java.util.Comparator;
import java.util.Iterator;
import java.util.TreeSet;
/*
* 方法一:实现Comparable接口
*/
//class Person implements Comparable<Person> {//实现Comparable接口,使得集合元素具备可比较性
// String name;
// int age;
//
// public Person(String name, int age) {
// super();
// 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;
// }
//
// @Override
// public int compareTo(Person p) {//复写Comparable的compareTo()方法
//// Person p = (Person) o;
// /*
// * 按年龄进行比较
// */
//// int temp=this.age-p.age;
//// return temp==0?this.getName().compareTo(p.getName()):temp;
// /*
// * 按姓名进行比较
// */
// int temp=this.getName().compareTo(p.getName());
// return temp==0?this.age-p.age:temp;
// }
//
//}
/*
* 方法2:实现Comparator接口,覆盖compare()方法,
* 并且将该类对象作为实际参数传递给TreeSet集合的构造函数
*/
class Person implements Comparator<Person>{
String name;
int age;
public Person() {
}
public Person(String name, int age) {
super();
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;
}
@Override
public int compare(Person o1, Person o2) {
int temp=o1.getName().compareTo(o2.getName());
return temp==0?o1.getAge()-o2.getAge():temp;
}
}
public class GenericDemo2 {
/**
* @param args
*/
public static void main(String[] args) {
TreeSet<Person> p = new TreeSet<Person>(new Person());
p.add(new Person("lisi", 21));
p.add(new Person("ahangsan", 42));
p.add(new Person("wangwu", 21));
p.add(new Person("buliu", 34));
p.add(new Person("xuliu", 26));
Iterator<Person> it = p.iterator();
while (it.hasNext()) {
Person p2 = it.next();
System.out.println(p2.getName() + ":::" + p2.getAge());
}
}
}
原文:http://www.cnblogs.com/ysw-go/p/5270272.html