黑马程序员------集合比较器

 ------- android培训、java培训、期待与您交流! ----------


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方法。

你可能感兴趣的:(黑马程序员------集合比较器)