1、学生类实现Comparable接口
2、自定义比较器。
代码是毕老师视频里的代码。
可以看JAVA-API这部分第15天【25天版本的视频】中的
【01-集合框架(TreeSet)】、【02-集合框架(TreeSet存储自定义对象)】这两个视频,有详解。
如果不想看视频,就看下面的代码
- import java.util.*;
- /*
- 当元素自身不具备比较性,或者具备的比较性不是所需要的。
- 这时需要让容器自身具备比较性。
- 定义一个比较器,将比较器作为参数传递给TreeSet集合的构造函数。
- 当两种排序都存在是,以比较器为主。
- 定义一个类,实现Comparator接口,覆盖compare方法。
- 以return:0判断元素相同
- */
- class TreeSetDemo1
- {
- public static void main(String[] args)
- {
- TreeSet ts = new TreeSet(new MyCompare());
- ts.add(new Student("lisi02",22));
- ts.add(new Student("lisi007",20));
- ts.add(new Student("lisi09",19));
- ts.add(new Student("lisi01",19));
- ts.add(new Student("lisi01",29));
- Iterator it =ts.iterator();
- while(it.hasNext()){
- Student stu = (Student)it.next();
- sop("Name:"+stu.getName()+"::::age:"+stu.getAge());
-
- }
- }
- public static void sop(Object obj){
- System.out.println(obj);
- }
- }
- class Student implements Comparable//该接口强制让学生具备比较性。
- {
- private String name;
- private int age;
- Student(String name ,int age){
- this.name = name;
- this.age=age;
- }
- public int compareTo(Object obj){
- if(!(obj instanceof Student))
- throw new RuntimeException("不是学生对象。");
- Student stu =(Student)obj;
- //System.out.println(this.name+"<--this...........stu-->"+stu.name);
- if(this.age>stu.age){
- return 1;
- }else if(this.age<stu.age){
- return -1;
- }else{
- return this.name.compareTo(stu.name);
- }
- }
- public String getName(){
- return name;
- }
- public int getAge(){
- return age;
- }
- }
- class MyCompare implements Comparator
- {
- public int compare(Object o1,Object o2){
- Student s1 = (Student)o1;
- Student s2 = (Student)o2;
- int num = s1.getName().compareTo(s2.getName());
- if(num==0){
- return (new Integer(s1.getAge())).compareTo(new Integer(s2.getAge()));
- //return s1.getAge()-s2.getAge();
- }
- return num;
- }
- }
复制代码 |