Java集合框架16:泛型上下界的理解
阿新 • • 發佈:2018-11-17
案例演示
package project; import java.util.ArrayList; importjava.util.Comparator; import java.util.TreeSet; public class Demo_Genric { /** *泛型固定下邊界 *? super E * *泛型固定上邊界 *? extends E */ public static void main(String[] args) { TreeSet<Student> ts1 = new TreeSet<>(new CompareByAge()); ts1.add(new Student("張三",23)); ts1.add(new Student("李四",24)); System.out.println(ts1); TreeSet<BaseStudent> ts2 = new TreeSet<>(); ts2.add(new BaseStudent("王武",29)); ts2.add(new BaseStudent("趙六",26)); ts2.add(new BaseStudent("碼子",12)); System.out.println(ts2); ts1.addAll(ts2); System.out.println(ts1); } public void demo() { ArrayList<Student> list1 = new ArrayList<>(); list1.add(new Student("張三",23)); list1.add(new Student("李四",24)); ArrayList<BaseStudent> list2 = new ArrayList<>(); list2.add(new BaseStudent("王五",23)); list2.add(new BaseStudent("趙六",24)); list1.addAll(list2); System.out.println(list1); } } class CompareByAge implements Comparator<Student>{ @Override public int compare(Student s1, Student s2) { int num = s2.getAge() - s1.getAge(); return num == 0 ? s2.getName().compareTo(s1.getName()) : num; } }
package project;
public class BaseStudent extends Student {
public BaseStudent() {
super();
}
public BaseStudent(String name, int age) {
super(name, age);
}
}
package project; public class Student implements Comparable<Student>{ private String name; private int age; public Student() { super(); } public Student(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 String toString() { return "Student [name=" + name + ", age=" + age + "]"; } @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + age; result = prime * result + ((name == null) ? 0 : name.hashCode()); return result; } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; Student other = (Student) obj; if (age != other.age) return false; if (name == null) { if (other.name != null) return false; } else if (!name.equals(other.name)) return false; return true; } @Override public int compareTo(Student o) { int num = this.age - o.age; //以年齡為主要條件 return num == 0 ? this.name.compareTo(o.name) : num; } }