内部比较器Comparable
【1】Comparable<T>是java.lang包下的一个接口
【2】主要方法为 int compareTo(T o),比较此对象与指定对象的顺序,如果该对象小于、等于或大于指定对象,则分别 返回负整数、零和正整数。
【3】Comparable<T>定义在 自定义类,如Person类的内部,通过public class Person implements Comparable{}来 使用,其中覆写int compareTo() 方法,并使用Collections.sort(Person的list)来排序。
【4】对Student类进行排序的实例:
package Gener; import java.util.Iterator; import java.util.TreeSet; public class TreeSetTest { public static void main(String args []){ Student stu1 = new Student("zhangsan", 97); Student stu2 = new Student("lisi", 44); Student stu3 = new Student("wangwu", 55); Student stu4 = new Student("zhaoliu", 67); TreeSet<Student> treeSet=new TreeSet<Student>();//建立新的TreeSet //TreeSet 是基于TreeMap的,按照二叉树的方式将插入的元素放入指定的位置 treeSet.add(stu1); treeSet.add(stu2); treeSet.add(stu3); treeSet.add(stu4); Iterator<Student> iter = treeSet.iterator(); while(iter.hasNext()){ Student t = iter.next(); System.out.println(t.toString()); } } } class Student implements Comparable{ private String name; private int age; public Student(String name, int age){ this.name = name; this.age = age; } public int getAge(){ return this.age; } public String getName(){ return this.name; } public String toString(){ return"姓名:"+this.getName()+" 年龄:"+this.getAge(); } public int compareTo(Object obj){ Student s = (Student)obj; if(s.age < this.age){ return -1; } if(s.age == this.age){ return this.name.compareTo(s.name); } if(s.age > this.age){ return 1; } return 0; } }
外部比较器Comparator
【1】Comparator<T>是java.util包下的一个接口
【2】主要方法为 int compare(T o1, T o2),比较第一个参数和第二个参数的大小,如果第一个参数小于、等于或大于 第二个参数,则分别返回负整数、零和正整数。
【3】Comparator<T>定义在 自定义类,如Person类的外部,通过public class Person implements Comparator{}来 使用,其中覆写int compare(T o1, T o2) 方法,并使用Collections.sort(Person的list)来排序。
【4】对Student类进行排序的实例:
package Gener; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.List; public class TreeSetTest2 { public static void main(String args[]){ List<Teacher> list = new ArrayList<Teacher>();//泛型队列,List允许有相同的元素,不是同步的 list.add(new Teacher("zhangsan", 78)); list.add(new Teacher("lisi", 33)); list.add(new Teacher("wangwu", 33)); list.add(new Teacher("zhaoliu", 94)); StuComp stucom = new StuComp();//新建一个比较器 Collections.sort(list, stucom);//进行比较 for(Teacher t : list){ System.out.println(t); } } } class Teacher{ public String name; public int age; public Teacher(String name, int age){ this.name = name; this.age = age; } public int getAge(){ return this.age; } public String getName(){ return this.name; } public String toString(){ return "姓名:"+this.name+" 年龄:"+this.age; } } class StuComp implements Comparator<Teacher>{ public int compare(Teacher th1, Teacher th2){ // 实现一个降序的排列 if(th1.getAge() < th2.getAge()){ return 1; } else if(th1.getAge() == th2.getAge()){ return th1.getName().compareTo(th2.getName());// 这里的compareTo是按字典顺序比较两个字符串。 } else if(th1.getAge() > th2.getAge()){ return -1; } return 0; } }