java-----集合比较器

来源:互联网 发布:看图软件哪个好 编辑:程序博客网 时间:2024/05/17 02:51



Comparable是接口 compareTo是Comparable中的方法。
Comparator也是接口 compare是Comparator中的方法。
对象一般有两种排序方式:一般用于集合中。
第一种方式是:实现Comparable  compareTo是Comparable接口中的方法 对于排序的对象需要覆Comparable接口中的compareTo方法。
Comparable排序代码示例:


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)  // 复写Comparable接口中的compareTo方法。        {                if(!(obj instanceof Student))                        throw new RuntimeException("不是学生对象");                Student s = (Student)obj;                if(this.age>s.age)                        return 1;                if(this.age==s.age)                {                        return this.name.compareTo(s.name);                }                return -1;        }}class Test{        public static void main(String[] args)         {                TreeSet ts = new TreeSet();                ts.add(new Student("lisi02",22));                ts.add(new Student("lisi02",21));                ts.add(new Student("lisi007",20));                ts.add(new Student("lisi09",19));                Iterator it = ts.iterator();                while(it.hasNext())                {                        Student stu = (Student)it.next();                        System.out.println(stu);                }        }}



第二种排序方式:定义一个排序类 实现Comparator接口 重写Comparator接口中的compare方法。

代码示例:


class Test{        public static void main(String[] args)         {                TreeSet ts = new TreeSet(new MyCompare());//将自定义的MyCompare作为参数传递给TreeSet的构造函数。来实现排序。                ts.add(new Student("lisi02",22));                ts.add(new Student("lisi02",21));                ts.add(new Student("lisi007",20));                ts.add(new Student("lisi09",19));                Iterator it = ts.iterator();                while(it.hasNext())                {                        Student stu = (Student)it.next();                        System.out.println(stu);                }        }}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 num;        }}

一共是两种: 自然排序和比较器排序。
1 自然排序:
让(对象)元素自身具备比较性。(对象)元素自身需要实现Comparable接口,覆盖CompareTo方法,
这种方式也称为元素的自然顺序。或者叫做默认顺序。

2 比较器排序:

当元素自然不具备比较性时,或者具备的比较性不是所需要的。这时就需要让集合自身具备比较性。
定义一个比较器类,实现Comparator接口 覆盖compare方法。

原创粉丝点击