My_Java之笔记(8)- 实现TreeSet集合的排序方法

来源:互联网 发布:sai绘画软件安卓版 编辑:程序博客网 时间:2024/05/17 23:20

方法一:元素实现Comparable接口,重写compareTo()方法,实现集合排序
方法二:定义一个比较器传给TreeSet的构造函数,该比较器实现Comparator接口,重写compare()方法,实现集合排序

import java.util.TreeSet;import java.util.Iterator;import java.util.Comparator;/**1.实现Comparable接口,重写compareTo()方法,实现集合排序*/class Student implements Comparable{  String name;  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 o = (Student)obj;  if(this.age==o.age)  return this.name.compareTo(o.name);  else if(this.age>o.age)  return 1;  else   return -1;  }  public String toString()  {  return this.name+"-"+this.age;  }}class Test{public static void main(String[] args){TreeSet<Student> ts = new TreeSet<Student>();ts.add(new Student("John",20));ts.add(new Student("Jack",20));ts.add(new Student("Jam",21));Iterator<Student>it = ts.iterator();while(it.hasNext()){System.out.println(it.next());}/**2.(匿名内部类的方式)实现Comparator接口,重写compare()方法,实现集合排序*/TreeSet<Student> ts2 = new TreeSet<Student>(new Comparator<Student>(){public int compare(Student sa, Student sb){if(sa.age==sb.age)  return sa.name.compareTo(sb.name);  else if(sa.age>sb.age)  return 1;  else   return -1;}});ts2.add(new Student("John",20));ts2.add(new Student("Jack",20));ts2.add(new Student("Jam",21));System.out.println();Iterator<Student>it2 = ts2.iterator();while(it2.hasNext()){System.out.println(it2.next());}  }}

测试结果:

Jack-20John-20Jam-21Jack-20John-20Jam-21


 

原创粉丝点击