java学习--集合框架(2)

01)TreeSet

  1. /* 
  2.  * |--Set:元素是无序(存入顺序和元素的位置不一致),元素不可以重复。 
  3.  *      |--HashSet:底层的数据结构是哈希表。 
  4.  *          HashSet是如何保证元素唯一性的呢? 
  5.  *          是通过元素的两个方法,hasCode和equals来完成的。 
  6.  *          如果元素的hashCode值相同,才会判断equals是否为true。 
  7.  *          如果hashCode的值不同,就不会判断equals。 
  8.  *      |--TreeSet:可以对集合中的元素进行排序。按照ASCII码自然顺序排列。 
  9.  */  
  10. public class TreeSetDemo {//TreeSet  
  11.     public static void sop(Object obj){  
  12.         System.out.println(obj);  
  13.     }  
  14.     public static void main(String[] args) {  
  15.         method_1();  
  16.     }  
  17.     public static void method_1(){  
  18.         TreeSet ts = new TreeSet();  
  19.         ts.add("aaa");  
  20.         ts.add("abb");  
  21.         ts.add("aab");  
  22.         ts.add("bba");  
  23.         ts.add("baa");  
  24.         for (Iterator<E> it = ts.iterator(); it.hasNext();){  
  25.             sop("ts = " + it.next());  
  26.         }  
  27.     }  
  28. }  
运行结果如下图所示:


02)TreeSet存储自定义对象

  1. /* 
  2.  * 需求: 
  3.  * 往TreeSet集合中存储自定义对象(学生)。 
  4.  * 按照学生的年龄进行排序。 
  5.  *  
  6.  * 注意:排序时,当主要条件相同时,一定要往后判断次要条件。 
  7.  */  
  8. public class TreeSetDemo_2 {  
  9.     public static void sop(Object obj){  
  10.         System.out.println(obj);  
  11.     }  
  12.     public static void main(String[] args) {  
  13.         method_1();  
  14.     }  
  15.     public static void method_1(){  
  16.         TreeSet ts = new TreeSet();  
  17.         ts.add(new Student("汤姆(1)"20));  
  18.         ts.add(new Student("杰瑞(2)"20));  
  19.         ts.add(new Student("汤姆(1)"20));  
  20.         ts.add(new Student("杰瑞(2)"20));  
  21.         ts.add(new Student("汤姆(2)"21));  
  22.         ts.add(new Student("杰瑞(2)"21));  
  23.         System.out.println("-------------------------------");  
  24.         for (Iterator it = ts.iterator(); it.hasNext();){  
  25.             Student st = (Student)it.next();  
  26.             sop(st.getName() + " 的年龄是 = " + st.GetAge());  
  27.         }  
  28.     }  
  29. }  
  30. class Student implements Comparable{  
  31.     private String name;  
  32.     private int age;  
  33.     Student(String name, int age){  
  34.         this.name = name;  
  35.         this.age = age;  
  36.     }  
  37.     public int compareTo(Object obj){//复写compareTo。  
  38.         if (!(obj instanceof Student))  
  39.             throw new RuntimeException("不是学生对象");  
  40.         Student st = (Student)obj;  
  41.         System.out.println(this.name + this.age + " ----比较---- " + st.name + this.age);  
  42.         if (this.age > st.age)  
  43.             return 1;  
  44.         if (this.age == st.age && this.name.equals(st.name))  
  45.             return 0;  
  46.         return -1;  
  47.     }  
  48.     public String getName(){  
  49.         return name;  
  50.     }  
  51.     public int GetAge(){  
  52.         return age;  
  53.     }  
  54. }  
运行结果如下图所示:


03)二叉树

  1. /* 
  2.  * |--Set:元素是无序(存入顺序和元素的位置不一致),元素不可以重复。 
  3.  *      |--HashSet:底层的数据结构是哈希表。 
  4.  *              HashSet是如何保证元素唯一性的呢? 
  5.  *              是通过元素的两个方法,hasCode和equals来完成的。 
  6.  *      |--TreeSet:可以对集合中的元素进行排序。按照ASCII码自然顺序排列。 
  7.  *              底层数据结构是(二叉树)。 
  8.  *              保证元素唯一性的依据是:compareTo方法,return 0; 
  9.  *          TreeSet排序的第一种方式:让元素自身具备比较性,元素需要实现Comparable接口,覆盖compareTo方法。 
  10.  *                              这种方式也称为元素的自然顺序,默认顺序。 
  11.  */  
  12. public class TreeSetDemo_3 {  
  13.     public static void sop(Object obj){  
  14.         System.out.println(obj);  
  15.     }  
  16.     public static void main(String[] args) {  
  17.         method_1();  
  18.     }  
  19.     public static void method_1(){  
  20.         TreeSet ts = new TreeSet();  
  21.         ts.add(new Student_3("汤姆(1)"20));  
  22.         ts.add(new Student_3("杰瑞(2)"20));  
  23.         ts.add(new Student_3("汤姆(1)"20));  
  24.         ts.add(new Student_3("杰瑞(2)"20));  
  25.         ts.add(new Student_3("汤姆(2)"21));  
  26.         ts.add(new Student_3("杰瑞(2)"21));  
  27.         for (Iterator it = ts.iterator(); it.hasNext();){  
  28.             Student_3 st = (Student_3)it.next();  
  29.             sop(st.getName() + " 的年龄是 = " + st.getAge());  
  30.         }  
  31.     }  
  32. }  
  33. class Student_3 implements Comparable{  
  34.     private String name;  
  35.     private int age;  
  36.     Student_3(String name, int age){  
  37.         this.name = name;  
  38.         this.age = age;  
  39.     }  
  40.     public int compareTo(Object obj){  
  41.         return 1;//值大于0,所以所有的元素都将被存储。(按age值的升序排列)  
  42. //      return 0;//值等于0,所以只有第一个元素被存储。  
  43. //      return -1;//值大小于0,所有的元素都将被存储。(按age值的降序排列)  
  44.     }  
  45.     public String getName(){  
  46.         return name;  
  47.     }  
  48.     public int getAge(){  
  49.         return age;  
  50.     }  
  51. }  
运行结果如下图所示:


04)实现Comparator方法排序

  1. /* 
  2.  * /* 
  3.  * |--Set:元素是无序(存入顺序和元素的位置不一致),元素不可以重复。 
  4.  *      |--HashSet:底层的数据结构是哈希表。 
  5.  *      |--TreeSet:可以对集合中的元素进行排序。按照ASCII码自然顺序排列。 
  6.  *          TreeSet排序的第二种方式:当元素不具备比较性或者具备的比较性不是所需要的。 
  7.  *                              这时就需要让集合自身具备比较性。在集合初始化时,就有了比较方式。 
  8.  * 定义比较器,将比较器作为参数传递给TreeSet集合的构造函数。 
  9.  *  
  10.  * 当两种方式都存在时:以比较器为主。             
  11.  * 定义一个类,实现Comparator接口,覆盖compare方法。     
  12.  */  
  13. public class TreeSetDemo_4 {//Comparator  
  14.     public static void sop(Object obj){  
  15.         System.out.println(obj);  
  16.     }  
  17.     public static void main(String[] args) {  
  18.         method_4();  
  19.         System.out.println("--------------------");  
  20.         method_5();  
  21.     }  
  22.     public static void method_4(){//Comparable  
  23.         TreeSet ts = new TreeSet();  
  24.         ts.add(new Student_4("汤姆(1)"20));  
  25.         ts.add(new Student_4("杰瑞(2)"20));  
  26.         ts.add(new Student_4("汤姆(1)"20));  
  27.         ts.add(new Student_4("杰瑞(2)"20));  
  28.         ts.add(new Student_4("汤姆(2)"21));  
  29.         ts.add(new Student_4("杰瑞(2)"21));  
  30.         for (Iterator it = ts.iterator(); it.hasNext();){  
  31.             Student_4 st = (Student_4)it.next();  
  32.             sop(st.getName() + " 的年龄是 = " + st.getAge());  
  33.         }  
  34.     }  
  35.     public static void method_5(){//Comparator  
  36.         TreeSet ts = new TreeSet(new MyCompare());//将比较器作为参数传递给TreeSet集合的构造函数。  
  37.         ts.add(new Student_4("汤姆(1)"20));  
  38.         ts.add(new Student_4("杰瑞(2)"20));  
  39.         ts.add(new Student_4("汤姆(1)"20));  
  40.         ts.add(new Student_4("杰瑞(2)"20));  
  41.         ts.add(new Student_4("汤姆(2)"21));  
  42.         ts.add(new Student_4("杰瑞(2)"21));  
  43.         for (Iterator it = ts.iterator(); it.hasNext();){  
  44.             Student_4 st = (Student_4)it.next();  
  45.             sop(st.getName() + " 的年龄是 = " + st.getAge());  
  46.         }  
  47.     }  
  48. }  
  49. class Student_4 implements Comparable{  
  50.     private String name;  
  51.     private int age;  
  52.     Student_4(String name, int age){  
  53.         this.name = name;  
  54.         this.age = age;  
  55.     }  
  56.     public int compareTo(Object obj){//复写compareTo。TreeSet只看结果(return),是正还是负。  
  57.         if (!(obj instanceof Student_4))  
  58.             throw new RuntimeException("不是学生对象");  
  59.         Student_4 st = (Student_4)obj;  
  60.         if (this.age > st.age)  
  61.             return 1;  
  62.         if (this.age == st.age)  
  63.             return this.name.compareTo(st.name);  
  64.         return -1;  
  65.     }  
  66.     public String getName(){  
  67.         return name;  
  68.     }  
  69.     public int getAge(){  
  70.         return age;  
  71.     }  
  72. }  
  73. class MyCompare implements Comparator{//定义比较器。  
  74.     public int compare(Object obj1, Object obj2){  
  75.         Student_4 st1 = (Student_4)obj1;  
  76.         Student_4 st2 = (Student_4)obj2;  
  77.         int num = st1.getName().compareTo(st2.getName());//姓名相同的元素将不存储。  
  78.         if (num == 0){  
  79.             return new Integer(st1.getAge()).compareTo(new Integer(st2.getAge()));  
  80.         }  
  81.         return num;  
  82.     }  
  83. }  
运行结果如下图所示:


05)TreeSet(练习)

  1. /* 
  2.  * 练习:按照字符串长度排序。 
  3.  *  
  4.  * 字符串本身具备比较性,但是它的比较方式不是所需要的。 
  5.  * 这时只能创建比较器。 
  6.  */  
  7. public class TreeSetTest {  
  8.     public static void sop(Object obj){  
  9.         System.out.println(obj);  
  10.     }  
  11.     public static void main(String[] args) {  
  12.         method_test();  
  13.     }  
  14.     public static void method_test(){  
  15.         TreeSet ts = new TreeSet(new StrLenComparator());  
  16.         ts.add("stre");  
  17.         ts.add("hgjfgh");  
  18.         ts.add("xvc");  
  19.         ts.add("wgre");  
  20.         ts.add("mfhfg");  
  21.         for (Iterator it = ts.iterator(); it.hasNext();){  
  22.             sop(it.next());  
  23.         }  
  24.     }  
  25. }  
  26. class StrLenComparator implements Comparator{  
  27.     public int compare(Object o1, Object o2) {  
  28.         String s1 = (String)o1;  
  29.         String s2 = (String)o2;  
  30.         int num = new Integer(s1.length()).compareTo(new Integer(s2.length()));//主要条件满足:比较字符串长度  
  31.         if (num == 0)//比较次要条件:比较字符串值  
  32.             return s1.compareTo(s2);  
  33.         return num;  
  34.     }  
  35. }  
运行结果如下图所示:


06)泛型(概述)

  1. /* 
  2.  * 泛型:jdk1.5版本以后出现的新特性。用于解决安全隐患,是一个类型安全机制。 
  3.  * 好处: 
  4.  *  1:将运行时期出现的问题ClassCastException,转移到编译时期,方便于程序员发现并解决问题。安全。 
  5.  *  2:避免了强制转换麻烦。 
  6.  */  
  7. public class GenericDemo {  
  8.     public static void sop(Object obj){  
  9.         System.out.println(obj);  
  10.     }  
  11.     public static void main(String[] args) {  
  12.         method_1();  
  13.         System.out.println("--------------------");  
  14.         method_2();  
  15.     }  
  16.     public static void method_1(){  
  17.         ArrayList<String> al = new ArrayList<String>();  
  18.         al.add("yert");  
  19.         al.add("nbvwc");  
  20.         al.add("q1aqed");  
  21.         al.add("sgdhdfghd");  
  22.         al.add("q2rqed");  
  23.         al.add("fqwdfd");  
  24. //      al.add(5);//传入错误的参数类型,类型转换异常:ClassCastException  
  25.         for (Iterator<String> it = al.iterator(); it.hasNext();){  
  26.             String s = it.next();  
  27.             sop(s + " = " + s.length());  
  28.         }  
  29.     }  
  30.     public static void method_2(){  
  31.         ArrayList<Integer> al = new ArrayList<Integer>();  
  32.         al.add(1);  
  33.         al.add(2);  
  34.         al.add(3);  
  35.         al.add(3);  
  36.         al.add(2);  
  37.         al.add(1);  
  38. //      al.add(5);//传入错误的参数类型,类型转换异常:ClassCastException  
  39.         for (Iterator<Integer> it = al.iterator(); it.hasNext();){  
  40.             Integer i = it.next();  
  41.             sop(i);  
  42.         }  
  43.     }  
  44. }  
运行结果如下图所示:


07)泛型(使用)

  1. /* 
  2.  * 泛型格式:通过<>来定义要操作的引用数据类型。 
  3.  * 在使用Java提供的对象时,什么时候使用泛型呢? 
  4.  *      通常在集合框架中很常见,只要剑道<>就要定义泛型。 
  5.  * 其实<>就是用来接收类型的:当使用集合时,将集合中要存储的数据类型作为参数传递到<>中即可。 
  6.  */  
  7. public class GenericDemo_2 {  
  8.     public static void sop(Object obj){  
  9.         System.out.println(obj);  
  10.     }  
  11.     public static void main(String[] args) {  
  12.         method_2();  
  13.     }  
  14.     public static void method_2(){  
  15.         TreeSet<String> ts = new TreeSet<String>(new LenComparator());  
  16.         ts.add("aa2a");  
  17.         ts.add("abbafd");  
  18.         ts.add("aabva");  
  19.         ts.add("aabva");//false  
  20.         ts.add("bwebavc");  
  21.         ts.add("weqbaa");  
  22.         for (Iterator<String> it = ts.iterator(); it.hasNext();){  
  23.             String s = it.next();  
  24.             sop(s + " = " + s.length());  
  25.         }  
  26.     }  
  27. }  
  28. class LenComparator implements Comparator<String>{  
  29.     public int compare(String o1, String o2) {  
  30.         int num = new Integer(o2.length()).compareTo(new Integer(o1.length()));  
  31.         if (num == 0)  
  32.             return o2.compareTo(o1);  
  33.         return num;  
  34.     }  
  35. }  
运行结果如下图所示:


08)泛型(类)

  1. /* 
  2.  * 定义泛型类。 
  3.  * 当类中要操作的(引用数据类型)不确定的时候用泛型类。 
  4.  * 早期是通过定义Object来完成扩展的,现在通过定义泛型来完成扩展。 
  5.  */  
  6. public class GenericClassDemo {  
  7.     public static void main(String[] args) {  
  8.         Utlis<Worker> tls = new Utlis<Worker>();  
  9.         tls.setWork(new Worker());  
  10.         Worker w = tls.getWork();  
  11.     }  
  12. }  
  13. class Worker{}  
  14. class Teacher{}  
  15. class Utlis<Job>{//泛型类  
  16.     private Job j;  
  17.     public void setWork(Job j){  
  18.         this.j = j;  
  19.     }  
  20.     public Job getWork(){  
  21.         return j;  
  22.     }  
  23. }  

09)类、方法(泛型)

  1. /* 
  2.  * 泛型类(Method_1<D>)定义的泛型,在整个类中有效,如果被方法使用,那么当泛型类的对象明确要操作的具体类型后,所有要操作的类型都将固定。 
  3.  *  
  4.  * 为了让不同的方法可以操作不同类型,而且类型还不确定。 
  5.  * 那么可以将泛型定义在方法上。(Method_2) 
  6.  */  
  7. public class GenericMethodDemo {  
  8.     public static void main(String[] args) {  
  9.         method_1();  
  10.         System.out.println("----------------------");  
  11.         method_2();  
  12.     }  
  13.     public static void method_1(){//使用泛型类。  
  14.         Method_1<String> m1 = new Method_1<String>();  
  15.         m1.show("hah");  
  16.         m1.print("heh");  
  17.         Method_1<Integer> m1_i = new Method_1<Integer>();  
  18.         m1_i.show(new Integer(110));  
  19.         m1_i.print(119);  
  20.     }  
  21.     public static void method_2(){  
  22.         Method_2 m2 = new Method_2();  
  23.         m2.show("哇哈哈");  
  24.         m2.print(222);  
  25.         m2.print("嘿嘿");  
  26.     }  
  27. }  
  28.   
  29. class Method_1<D>{//泛型类。  
  30.     public void show(D d){  
  31.         System.out.println("(泛型类)Show: " + d);  
  32.     }  
  33.     public void print(D d){  
  34.         System.out.println("(泛型类)Print: " + d);  
  35.     }  
  36. }  
  37. class Method_2{  
  38.     public <Q> void show(Q q){//泛型方法。  
  39.         System.out.println("(泛型方法)Show: " + q);  
  40.     }  
  41.     public <Q> void print(Q q){  
  42.         System.out.println("(泛型方法)Print: " + q);  
  43.     }  
  44. }  


10)静态方法(泛型)

  1. /* 
  2.  * 静态方法泛型。 
  3.  * 特殊之处:静态方法不可以访问类上定义的泛型。如果静态方法操作的引用数据类型不确定,可以将泛型定义在方法上。
  4. 注意:泛型放在返回值类型前,修饰符后
  5. static方法需要使用泛型能力,就必须使其成为泛型方法。
  6.  */  
  7. public class GenericStaticDemo {  
  8.     public static void main(String[] args) {  
  9.         method();  
  10.     }  
  11.     public static void method(){  
  12.         StaticDemo<String> s = new StaticDemo<String>();  
  13.         s.show("hah");  
  14.         s.print("heh");  
  15.         s.print(119);  
  16.         s.method_Static("哇咔咔");  
  17.         s.method_Static(new Integer(369));  
  18.     }  
  19. }  
  20. class StaticDemo<Q>{  
  21.     public void show(Q q){  
  22.         System.out.println("(泛型类)Q: " + q);  
  23.     }  
  24.     public <Q> void print(Q q){  
  25.         System.out.println("(泛型方法): " + q);  
  26.     }  
  27.     public static <Q> void method_Static(Q q){  
  28.         System.out.println("(静态)(泛型方法): " + q);  
  29.     }  
  30. }  
运行结果如下图所示:


11)接口(泛型)

  1. public class GenericInterDemo {  
  2.     public static void main(String[] args) {  
  3.         method();  
  4.     }  
  5.     public static void method(){  
  6.         GenericImpl gi = new GenericImpl();  
  7.         gi.show("hah");  
  8.         gi.show("heh");  
  9.         gi.print(new Integer(119));  
  10.         gi.print(120);  
  11.         gi.print("哇哈哈");  
  12.     }  
  13. }  
  14. interface GenericInter<I> {//泛型定义在接口上。  
  15.     void show(I i);  
  16. }  
  17. class GenericImpl implements GenericInter<String>{  
  18.     public void show(String s){  
  19.         System.out.println("(接口)show: " + s);  
  20.     }  
  21.     public <I> void print(I i){  
  22.         System.out.println("(方法)print: " + i);  
  23.     }  
  24. }  
运行结果如下图所示:


12)泛型限定(一)

  1. /* 
  2.  * 泛型的一些高级应用。 
  3.  * <?>通配符。也可以理解为占位符。 
  4.  * <? extends E>:可以接受E类型或者E的子类型。<上限限定>。 
  5.  * <? super E>:可以接受E类型或者E的父类型。<下限限定>。 
  6.  */  
  7. public class GenericAdvDemo {  
  8.     public static void sop(Object obj){  
  9.         System.out.println(obj);  
  10.     }  
  11.     public static void main(String[] args) {  
  12.         method_1();  
  13.         method_2();  
  14.         method_3();  
  15.     }  
  16.     public static void method_1(){  
  17.         ArrayList<String> al1 = new ArrayList<String>();  
  18.         al1.add("Java01");  
  19.         al1.add("Java02");  
  20.         al1.add("Java03");  
  21.         printColl_1(al1);  
  22.         ArrayList<Integer> al2 = new ArrayList<Integer>();  
  23.         al2.add(01);  
  24.         al2.add(02);  
  25.         al2.add(03);  
  26.         printColl_1(al2);  
  27.     }  
  28.     public static void method_2(){  
  29.         ArrayList<Person_adv> ap1 = new ArrayList<Person_adv>();  
  30.         ap1.add(new Person_adv("汤姆"));  
  31.         ap1.add(new Person_adv("汤姆"));  
  32.         ap1.add(new Person_adv("汤姆"));  
  33.         printColl_2(ap1);  
  34.         ArrayList<Student_Adv> ap2 = new ArrayList<Student_Adv>();  
  35.         ap2.add(new Student_Adv("杰瑞"));  
  36.         ap2.add(new Student_Adv("杰瑞"));  
  37.         ap2.add(new Student_Adv("杰瑞"));  
  38.         printColl_2(ap2);  
  39.     }  
  40.     public static void method_3(){  
  41.         TreeSet<Student_Adv> ts = new TreeSet<Student_Adv>(new Comp());  
  42.         ts.add(new Student_Adv("斯派克一号"));  
  43.         ts.add(new Student_Adv("斯派克二号"));  
  44.         ts.add(new Student_Adv("斯派克二号"));  
  45.         ts.add(new Student_Adv("斯派克三号"));  
  46.         ts.add(new Student_Adv("斯派克五号"));  
  47.         printColl_3(ts);  
  48.     }  
  49.     public static void printColl_1(ArrayList<?> al){//<上限限定>  
  50.         for (Iterator<?> it = al.iterator(); it.hasNext();){  
  51.             sop(it.next());  
  52.         }  
  53.         System.out.println("-----------------------");  
  54.     }  
  55.     public static void printColl_2(ArrayList<? extends Person_adv> ap){  
  56.         for (Iterator<? extends Person_adv> it = ap.iterator(); it.hasNext();){  
  57.             sop(it.next().getName());  
  58.         }  
  59.         System.out.println("-----------------------");  
  60.     }  
  61.     public static void printColl_3(TreeSet<? extends Person_adv> ap){  
  62.         for (Iterator<? extends Person_adv> it = ap.iterator(); it.hasNext();){  
  63.             sop(it.next().getName());  
  64.         }  
  65.         System.out.println("-----------------------");  
  66.     }  
  67. }  
  68.   
  69. class Person_adv{  
  70.     private String name;  
  71.     Person_adv(String name){  
  72.         this.name = name;  
  73.     }  
  74.     public String getName(){  
  75.         return name;  
  76.     }  
  77. }  
  78. class Student_Adv extends Person_adv{  
  79.     Student_Adv(String name){  
  80.         super(name);  
  81.     }  
  82. }  
  83. class Comp implements Comparator<Student_Adv>{//比较器。  
  84.     public int compare(Student_Adv s1, Student_Adv s2){  
  85.         return s1.getName().compareTo(s2.getName());  
  86.     }  
  87. }  
运行结果如下图所示:


13)泛型限定(二)

  1. /* 
  2.  * TreeSet通过直接传入父类比较器。 
  3.  */  
  4. public class GenericAdvDemo_2 {  
  5.     public static void sop(Object obj){  
  6.         System.out.println(obj);  
  7.     }  
  8.     public static void main(String[] args) {  
  9.         method_1();  
  10.         method_2();  
  11.     }  
  12.     public static void method_1(){  
  13.         TreeSet<Student_Adv_2> ts = new TreeSet<Student_Adv_2>(new StuComp());//传入父类比较器。  
  14.         ts.add(new Student_Adv_2("(Stu)Java01"));  
  15.         ts.add(new Student_Adv_2("(Stu)Java04"));  
  16.         ts.add(new Student_Adv_2("(Stu)Java02"));  
  17.         ts.add(new Student_Adv_2("(Stu)Java06"));  
  18.         ts.add(new Student_Adv_2("(Stu)Java05"));  
  19.         ts.add(new Student_Adv_2("(Stu)Java02"));  
  20.         printColl_1(ts);  
  21.         System.out.println("---Student_Adv_2---");  
  22.     }  
  23.     public static void method_2(){  
  24.         TreeSet<Worker_Adv_2> tw = new TreeSet<Worker_Adv_2>(new AllComp());//传入StuComp(子类)比较器。  
  25.         tw.add(new Worker_Adv_2("(Wok)Java01"));  
  26.         tw.add(new Worker_Adv_2("(Wok)Java04"));  
  27.         tw.add(new Worker_Adv_2("(Wok)Java02"));  
  28.         tw.add(new Worker_Adv_2("(Wok)Java06"));  
  29.         tw.add(new Worker_Adv_2("(Wok)Java05"));  
  30.         tw.add(new Worker_Adv_2("(Wok)Java02"));  
  31.         printColl_1(tw);  
  32.         System.out.println("---Person_adv_2---");  
  33.     }  
  34.     public static void printColl_1(TreeSet<? extends Person_adv_2> ts){  
  35.         for (Iterator<? extends Person_adv_2> it = ts.iterator(); it.hasNext();){  
  36.             sop(it.next().getName());  
  37.         }  
  38.     }  
  39. }  
  40. class AllComp implements Comparator<Person_adv_2>{//AllComp(父类)比较器  
  41.     public int compare(Person_adv_2 p1, Person_adv_2 p2){  
  42.         return p2.getName().compareTo(p1.getName());  
  43.     }  
  44. }  
  45. class StuComp implements Comparator<Student_Adv_2>{//StuComp(子类)比较器  
  46.     public int compare(Student_Adv_2 s1, Student_Adv_2 s2){  
  47.         return s1.getName().compareTo(s2.getName());  
  48.     }  
  49. }  
  50. class WorkComp implements Comparator<Worker_Adv_2>{//WorkComp(子类)比较器  
  51.     public int compare(Worker_Adv_2 w1, Worker_Adv_2 w2){  
  52.         return w1.getName().compareTo(w2.getName());  
  53.     }  
  54. }  
  55. class Person_adv_2{  
  56.     private String name;  
  57.     Person_adv_2(String name){  
  58.         this.name = name;  
  59.     }  
  60.     public String getName(){  
  61.         return name;  
  62.     }  
  63.     public String toString(){  
  64.         return "Person_adv_2: " + name;  
  65.     }  
  66. }  
  67. class Student_Adv_2 extends Person_adv_2{  
  68.     Student_Adv_2(String name){  
  69.         super(name);  
  70.     }  
  71. }  
  72. class Worker_Adv_2 extends Person_adv_2{  
  73.     Worker_Adv_2(String name){  
  74.         super(name);  
  75.     }  
  76. }  
运行结果如下图所示:
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值