——- android培训、java培训、期待与您交流! ———-
七、TreeSet、泛型限定和比较器限定方式的综合运用方式一
下面来个综合的复杂代码
//让每一个集合自身具备比较性
import java.util.*;
class GenericDemo6
{
public static void main(String[] args)
{
//定义Person集,可以存放Person和Person的子类对象
TreeSet<Person> al1 = new TreeSet<Person>();
al1.add(new Student("Student--abc--1"));
al1.add(new Student("Student--abc--3"));
al1.add(new Student("Student--abc--2"));
al1.add(new Worker("Worker--abc--2"));
al1.add(new Worker("Worker--abc--3"));
al1.add(new Worker("Worker--abc--1"));
al1.add(new Person("Person--abc1"));
al1.add(new Person("Person--abc3"));
al1.add(new Person("Person--abc2"));
printColl(al1);
}
public static void printColl(TreeSet<? extends Person> al)
{
Iterator<? extends Person> it = al.iterator();
while(it.hasNext())
{
System.out.println(it.next());
}
}
}
class Person implements Comparable<Person>
{
private String name;
Person(String name)
{
this.name = name;
}
public String getName()
{
return name;
}
public String toString()
{
return name;
}
public int compareTo(Person s)
{
return this.getName().compareTo(s.getName());
}
}
//<? super Person>所以<>只可以填<Person>,
//注意<? super Person>的Person是跟着TreeSet<Person>中的Person走的!
class Student extends Person implements Comparable<Person>
{
Student(String name)
{
super(name);
}
public int compareTo(Person s)
{
//Person s = new Student();这个是可以接受进来的,所以能比较
return this.getName().compareTo(s.getName());
}
}
class Worker extends Person implements Comparable<Person>
{
Worker(String name)
{
super(name);
}
public int compareTo(Person s)
{
//Person s = new Worker();这个是可以接受进来的,所以能比较
return this.getName().compareTo(s.getName());
}
}
八、TreeSet、泛型限定和比较器限定方式的综合运用方式二
//让集合具备比较性
import java.util.*;
class GenericDemo6
{
public static void main(String[] args)
{
//定义Person集,可以存放Person和Person的子类对象
TreeSet<Person> al1 = new TreeSet<Person>(new Comp());
al1.add(new Student("Student--abc--1"));
al1.add(new Student("Student--abc--3"));
al1.add(new Student("Student--abc--2"));
al1.add(new Worker("Worker--abc--2"));
al1.add(new Worker("Worker--abc--3"));
al1.add(new Worker("Worker--abc--1"));
al1.add(new Person("Person--abc1"));
al1.add(new Person("Person--abc3"));
al1.add(new Person("Person--abc2"));
printColl(al1);
}
public static void printColl(TreeSet<? extends Person> al)
{
Iterator<? extends Person> it = al.iterator();
while(it.hasNext())
{
System.out.println(it.next());
}
}
}
class Person
{
private String name;
Person(String name)
{
this.name = name;
}
public String getName()
{
return name;
}
public String toString()
{
return name;
}
}
class Student extends Person
{
Student(String name)
{
super(name);
}
}
class Worker extends Person
{
Worker(String name)
{
super(name);
}
}
//<? super Person>所以<>只可以填<Person>,在本例中是不可以Person父类填写Object类的
//注意<? super Person>的Person是跟着TreeSet<Person>中的Person走的!
class Comp implements Comparator<Person>
{
public int compare(Person s1,Person s2)
{
return s1.getName().compareTo(s2.getName());
}
}