package cn.itcast.generic;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.TreeSet;
import org.junit.Test;
public class Demo2 {
public void show(List<?> list)
{
System.out.println(list);
}
@Test
public void fun4()
{
List<String>list=new ArrayList<String>();
list.add("a");
list.add("b");
list.add("c");
List<Integer>list1=new ArrayList<Integer>();
list1.add(1);
list1.add(3);
list1.add(4);
show(list);
show(list1);
}
}
通配符?在集合中的使用
1、?extends E
代表的是E类型或E的子类类型,在Collection接口中的addAll方法上使用。
2、?super E
代表的是E类型或E的父类类型,在TreeSet的构造方法上使用。
TreeSet:是一个可以排序的Set集合。
怎么排序呢?
1、自然顺序,实现了Comparable接口,就代表这个类型的元素具有自然顺序。
2、比较器,实现这个接口Comparator的类,可以根据指定条件进行比较。
自然顺序
要求学生信息按照id大小输出。
package cn.itcast.generic;
import java.util.ArrayList;
import java.util.List;
import java.util.TreeSet;
import org.junit.Test;
public class Demo2 {
//TreeSet集合应用
@Test
//student类的自然顺序就是按照id排序
public void fun2()
{
TreeSet<Student> ts=new TreeSet<Student>();//TreeSet集合中的元素必须要有顺序。所以要实现Comparable接口
ts.add(new Student(1, "jack", 23));
ts.add(new Student(5, "Tom", 21));
ts.add(new Student(3, "yang", 18));
System.out.println(ts);
}
}
class Student implements Comparable<Student>
{
private int id;
private String name;
private int age;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
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;
}
public Student(int id, String name, int age) {
super();
this.id = id;
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "Student [id=" + id + ", name=" + name + ", age=" + age + "]";
}
//重写compareTo方法
public int compareTo(Student o) {
// TODO Auto-generated method stub
return this.id-o.id;
}
}
输出[Student [id=1, name=jack, age=23], Student [id=3, name=yang, age=18], Student [id=5, name=Tom, age=21]]
比较器
要求学生信息按照年龄输出—-指定比较器
package cn.itcast.generic;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.TreeSet;
import org.junit.Test;
public class Demo2 {
//TreeSet集合应用
@Test
public void fun2()
{
TreeSet<Student>ts=new TreeSet<Student>(new Comparator<Student>() {//指定比较器,按年龄排序
public int compare(Student o1, Student o2) {
return o1.getAge()-o2.getAge();
}
});
ts.add(new Student(1, "jack", 23));
ts.add(new Student(5, "Tom", 21));
ts.add(new Student(3, "yang", 18));
System.out.println(ts);
}
}
class Student implements Comparable<Student>
{
private int id;
private String name;
private int age;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
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;
}
public Student(int id, String name, int age) {
super();
this.id = id;
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "Student [id=" + id + ", name=" + name + ", age=" + age + "]";
}
//重写compareTo方法
public int compareTo(Student o) {
// TODO Auto-generated method stub
return this.id-o.id;
}
}
输出[Student [id=3, name=yang, age=18], Student [id=5, name=Tom, age=21], Student [id=1, name=jack, age=23]]