黑马程序员技术交流社区

标题: TreeSet、泛型限定和比较器限定方式的综合运用方式 [打印本页]

作者: itheima_llt    时间: 2015-4-17 12:28
标题: TreeSet、泛型限定和比较器限定方式的综合运用方式
  1. ##七、TreeSet、泛型限定和比较器限定方式的综合运用方式一
  2. 下面来个综合的复杂代码

  3. ```
  4. //让每一个集合自身具备比较性
  5. import java.util.*;
  6. class GenericDemo6
  7. {
  8.         public static void main(String[] args)
  9.         {
  10.                 //定义Person集,可以存放Person和Person的子类对象
  11.                 TreeSet<Person> al1 = new TreeSet<Person>();
  12.                 al1.add(new Student("Student--abc--1"));
  13.                 al1.add(new Student("Student--abc--3"));
  14.                 al1.add(new Student("Student--abc--2"));
  15.                 al1.add(new Worker("Worker--abc--2"));
  16.                 al1.add(new Worker("Worker--abc--3"));
  17.                 al1.add(new Worker("Worker--abc--1"));
  18.                 al1.add(new Person("Person--abc1"));
  19.                 al1.add(new Person("Person--abc3"));
  20.                 al1.add(new Person("Person--abc2"));
  21.                 printColl(al1);

  22.         }

  23.         public static void printColl(TreeSet<? extends Person> al)
  24.         {
  25.                 Iterator<? extends Person> it = al.iterator();

  26.                 while(it.hasNext())
  27.                 {
  28.                         System.out.println(it.next());
  29.                 }
  30.         }

  31. }

  32. class Person implements Comparable<Person>
  33. {
  34.         private String name;
  35.         Person(String name)
  36.         {
  37.                 this.name = name;
  38.         }
  39.         public String getName()
  40.         {
  41.                 return name;
  42.         }

  43.         public String toString()
  44.         {
  45.                 return name;
  46.         }

  47.         public int compareTo(Person s)
  48.         {
  49.                 return this.getName().compareTo(s.getName());
  50.         }
  51. }

  52. //<? super Person>所以<>只可以填<Person>,
  53. //注意<? super Person>的Person是跟着TreeSet<Person>中的Person走的!

  54. class Student extends Person implements Comparable<Person>
  55. {
  56.         Student(String name)
  57.         {
  58.                 super(name);
  59.         }

  60.         public int compareTo(Person s)
  61.         {
  62.                 //Person s = new Student();这个是可以接受进来的,所以能比较
  63.                 return this.getName().compareTo(s.getName());
  64.         }
  65. }

  66. class Worker extends Person implements Comparable<Person>
  67. {
  68.         Worker(String name)
  69.         {
  70.                 super(name);
  71.         }

  72.         public int compareTo(Person s)
  73.         {
  74.                 //Person s = new Worker();这个是可以接受进来的,所以能比较
  75.                 return this.getName().compareTo(s.getName());
  76.         }
  77. }
  78. ```

  79. ##八、TreeSet、泛型限定和比较器限定方式的综合运用方式二
  80. ```
  81. //让集合具备比较性
  82. import java.util.*;
  83. class GenericDemo6
  84. {
  85.         public static void main(String[] args)
  86.         {
  87.                 //定义Person集,可以存放Person和Person的子类对象
  88.                 TreeSet<Person> al1 = new TreeSet<Person>(new Comp());
  89.                 al1.add(new Student("Student--abc--1"));
  90.                 al1.add(new Student("Student--abc--3"));
  91.                 al1.add(new Student("Student--abc--2"));
  92.                 al1.add(new Worker("Worker--abc--2"));
  93.                 al1.add(new Worker("Worker--abc--3"));
  94.                 al1.add(new Worker("Worker--abc--1"));
  95.                 al1.add(new Person("Person--abc1"));
  96.                 al1.add(new Person("Person--abc3"));
  97.                 al1.add(new Person("Person--abc2"));
  98.                 printColl(al1);

  99.         }

  100.         public static void printColl(TreeSet<? extends Person> al)
  101.         {
  102.                 Iterator<? extends Person> it = al.iterator();

  103.                 while(it.hasNext())
  104.                 {
  105.                         System.out.println(it.next());
  106.                 }
  107.         }

  108. }

  109. class Person
  110. {
  111.         private String name;
  112.         Person(String name)
  113.         {
  114.                 this.name = name;
  115.         }
  116.         public String getName()
  117.         {
  118.                 return name;
  119.         }

  120.         public String toString()
  121.         {
  122.                 return name;
  123.         }
  124. }

  125. class Student extends Person
  126. {
  127.         Student(String name)
  128.         {
  129.                 super(name);
  130.         }
  131. }

  132. class Worker extends Person
  133. {
  134.         Worker(String name)
  135.         {
  136.                 super(name);
  137.         }
  138. }

  139. //<? super Person>所以<>只可以填<Person>,在本例中是不可以Person父类填写Object类的
  140. //注意<? super Person>的Person是跟着TreeSet<Person>中的Person走的!
  141. class Comp implements Comparator<Person>
  142. {
  143.         public int compare(Person s1,Person s2)
  144.         {
  145.                 return s1.getName().compareTo(s2.getName());
  146.         }
  147. }
  148. ```
复制代码







欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2