java比较器Comparable接口与Comaprator接口的深入分析

2016-02-19 09:22 28 1 收藏

想要天天向上,就要懂得享受学习。图老师为大家推荐java比较器Comparable接口与Comaprator接口的深入分析,精彩的内容需要你们用心的阅读。还在等什么快点来看看吧!

【 tulaoshi.com - 编程语言 】

java的比较器有两类,分别是Comparable接口和Comparator接口。
在为对象数组进行排序时,比较器的作用非常明显,首先来讲解Comparable接口。
让需要进行排序的对象实现Comparable接口,重写其中的compareTo(T o)方法,在其中定义排序规则,那么就可以直接调用java.util.Arrays.sort()来排序对象数组,实例如下:
代码如下:

class Student implements ComparableStudent{
    private String name;
    private int age;
    private float score;

    public Student(String name, int age, float score) {
        this.name = name;
        this.age = age;
        this.score = score;
    }

    public String toString()
    {
        return name+"tt"+age+"tt"+score;
    }
    @Override
    public int compareTo(Student o) {
        // TODO Auto-generated method stub
        if(this.scoreo.score)//score是private的,为什么能够直接调用,这是因为在Student类内部
            return -1;//由高到底排序
        else if(this.scoreo.score)
            return 1;
        else{
            if(this.ageo.age)
                return 1;//由底到高排序
            else if(this.ageo.age)
                return -1;
            else
                return 0;
        }
    }
}
public class ComparableDemo01 {
    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Student stu[]={new Student("zhangsan",20,90.0f),
                new Student("lisi",22,90.0f),
                new Student("wangwu",20,99.0f),
                new Student("sunliu",22,100.0f)};
        java.util.Arrays.sort(stu);
        for(Student s:stu)
        {
            System.out.println(s);
        }
    }
}

程序运行结果:
sunliu 22 100.0
wangwu 20 99.0
zhangsan 20 90.0
lisi 22 90.0
但是在设计类的时候,往往没有考虑到让类实现Comparable接口,那么我们就需要用到另外的一个比较器接口Comparator。
从上面的实例我们可以发现,compareTo(T o)只有一个参数,而Comparator接口中必须要实现的compare(T o1,T o2)就有两个参数。
代码实例:
代码如下:

package edu.sjtu.ist.comutil;
import java.util.Comparator;
class Student {
    private String name;
    private int age;
    private float score;

    public Student(String name, int age, float score) {
        this.name = name;
        this.age = age;
        this.score = score;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public float getScore() {
        return score;
    }
    public void setScore(float score) {
        this.score = score;
    }
    public String toString()
    {
        return name+"tt"+age+"tt"+score;
    }
}
class StudentComparator implements ComparatorStudent{
    @Override
    public int compare(Student o1, Student o2) {
        // TODO Auto-generated method stub
        if(o1.getScore()o2.getScore())
            return -1;
        else if(o1.getScore()o2.getScore())
            return 1;
        else{
            if(o1.getAge()o2.getAge())
                return 1;
            else if(o1.getAge()o2.getAge())
                return -1;
            else
                return 0;
        }
    }

}
public class ComparableDemo02 {
    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Student stu[]={new Student("zhangsan",20,90.0f),
                new Student("lisi",22,90.0f),
                new Student("wangwu",20,99.0f),
                new Student("sunliu",22,100.0f)};
        java.util.Arrays.sort(stu,new StudentComparator());
        for(Student s:stu)
        {
            System.out.println(s);
        }
    }
}

来源:http://www.tulaoshi.com/n/20160219/1590546.html

延伸阅读
       Java是一种面向对象(OOP)的编程语言;在Java中,面向对象是以类的形式出现的,而对象则是类的实例,所以要学习Java的类首先必须了解面向对象。面向对象编程不同于过程语言或结构化程序设计,他存在对象这个概念,面向对象中的对象不仅是数据结构,还包含和数据结构有关的方法。 一:类 1.类...
通常我们为了更好的缓解服务器压力,和增强搜索引擎的友好面,都将文章内容生成静态页面。 但是有时为了能实时的显示一些信息,或者还想运用动态脚本解决一些问题,不能用静态的方式来展示网站内容,必须用到动态页面显示。 这样以来,就损失了对搜索引擎的友好面,怎么样在两者之间找个中间方法呢,如何增强你网站中地址的可读性和让搜索引擎...
一个朋友的项目里用到了fusionchart,同时需要提供多个报表的word下载功能。 毫无疑问,只是一个很棘手的问题。 fusionchart提供了服务端和客户端生成图片的功能,都是基于client端展示了flash以后做的。 朋友的项目是基于linux的,office本身的那套com机制是没办法通过jacob调用了。 纯java的操作word,POI和docx4j,可以生成word文档,ta...
一.regex(正则表达式):RegularExpressions(代替了StringTokenizer);字符串处理利器;在unix流行,perl使用regex更牛。 主要用在字符串匹配、查找和替换。例如:匹配IP(范围小于256)使用正则很好搞;从网页中揪出大量email地址发送垃圾邮件;从网页里揪出链接。包含Matcher(用模式匹配字符串后产生的结果)和pattern。 代码如下: &n...
点击上传按钮后,webwork的程序流如下: step 1)进入ServletDispatcher.service public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException { ........ request = wrapRequest(request); ......... } step2)进入ServletDispatcher.wrapRequest protect...

经验教程

546

收藏

24
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部