Java 常用类库 之 比较接口 Comparator

http://www.verejava.com/?id=169931036202101

/**
    知识点: 比较类 Comparator

    题目: 将某班学生按数学成绩从小到大排序

    思路:
        1. 抽象出类:
            1.1 班级(ClassSet)
            1.2 学生(Student)
        2. 找出类关系:
            2.1 学生 属于 班级 Student -> ClassSet(多对1)
        3. 找出类属性:
            3.1 ClassSet(班级名称,班级人数)
            3.2 Student(学生名称,数学成绩)
        4. 找出类方法:
            4.1 学生添加到班级 ClassSet{addStudent(Student s)}
            4.2 学生成绩从小到大排序  ClassSet{sortByScore()}
*/
import java.util.Arrays;
import java.util.Comparator;
public class TestComparator
{
    public static void main(String[] args)
    {
        //实例化4G班级
        ClassSet c=new ClassSet("4G",4);
        //添加学生
        c.addStudent(new Student("李明",90));
        c.addStudent(new Student("李浩",80));
        c.addStudent(new Student("王涛",95));
        c.addStudent(new Student("张胜",70));

        //获得4G班级学生数组集合
        Student[] students=c.getStudents();
        //输出学生信息
        for(Student s:students)
        {
            if(s!=null)
                System.out.println(s.getName()+","+s.getMathScore());
        }

        System.out.println("\n根据学生成绩升序排序");
        Arrays.sort(students,new StudentAscComparator());
        for(Student s:students)
        {
            if(s!=null)
                System.out.println(s.getName()+","+s.getMathScore());
        }

        System.out.println("\n根据学生成绩降序排序");
        Arrays.sort(students,new StudentDescComparator());
        for(Student s:students)
        {
            if(s!=null)
                System.out.println(s.getName()+","+s.getMathScore());
        }

    }
}
class ClassSet
{
    private String className;//班级名称
    private int maxSize;//班级学生人数
    private int currentSize;//当前多少学生
    private Student[] students;//所有学生的数组

    public ClassSet(String className,int maxSize)
    {
        this.className=className;
        this.maxSize=maxSize;
        students=new Student[maxSize];
    }

    public Student[] getStudents()
    {
        return this.students;
    }

    /**
        添加学生
    */
    public void addStudent(Student s)
    {
        for(int i=0;i<students.length;i++)
        {
            if(students[i]==null)
            {
                students[i]=s;
                currentSize++;
                break;
            }
        }
    }

}
class Student
{
    private String name;//学生姓名
    private int mathScore;//数学成绩

    public Student(String name,int mathScore)
    {
        this.name=name;
        this.mathScore=mathScore;
    }
    public String getName()
    {
        return this.name;
    }
    public void setName(String name)
    {
        this.name=name;
    }
    public int getMathScore()
    {
        return this.mathScore;
    }
    public void setMathScore(int mathScore)
    {
        this.mathScore=mathScore;
    }
}
/**
    学生升序排列
*/
class StudentAscComparator implements Comparator
{
    public int compare(Object o1,Object o2)
    {
        if((o1 instanceof Student)&&(o2 instanceof Student))
        {
            Student s1=(Student)o1;
            Student s2=(Student)o2;
            if(s1.getMathScore()>s2.getMathScore())
                return 1;
            if(s1.getMathScore()<s2.getMathScore())
                return -1;
        }
        return 0;
    }
}
/**
    学生降序排列
*/
class StudentDescComparator implements Comparator
{
    public int compare(Object o1,Object o2)
    {
        if((o1 instanceof Student)&&(o2 instanceof Student))
        {
            Student s1=(Student)o1;
            Student s2=(Student)o2;
            if(s1.getMathScore()>s2.getMathScore())
                return -1;
            if(s1.getMathScore()<s2.getMathScore())
                return 1;
        }
        return 0;
    }
}

http://www.verejava.com/?id=169931036202101

原文地址:https://www.cnblogs.com/verejava/p/9216585.html

时间: 2024-08-30 07:24:34

Java 常用类库 之 比较接口 Comparator的相关文章

Google的Java常用类库 Guava资料

java的人应该都知道Apache commons的java常用类库吧,这个Guava和commons一样,封装出一套比jdk本身提供的常用类库强大.既然有了这个这么强大的类库,我们就没必要重复造轮子了.这东西怎么用,看看官网的文档和API.英文不好的,也有网上翻译出来共享的.开始Guava之旅猛击下面的链接 官方地址:http://code.google.com/p/guava-libraries/  [大家都知道这个要FQ哦,windows下推荐ziyoumen软件] 官方翻译文档:http

Google的Java常用类库 Guava

Guava 中文是石榴的意思,该项目是 Google 的一个开源项目,包含许多 Google 核心的 Java 常用库. 1. 基本工具 [Basic utilities] 让使用Java语言变得更舒适 1.1 使用和避免null:null是模棱两可的,会引起令人困惑的错误,有些时候它让人很不舒服.很多Guava工具类用快速失败拒绝null值,而不是盲目地接受 1.2 前置条件: 让方法中的条件检查更简单 1.3 常见Object方法: 简化Object方法实现,如hashCode()和toSt

Java常用类库之StringBuilder与StringBuffer

String与StringBuffer与StringBuilder的比较 String的内容一旦声明则不可改变,如果改变,则改变的肯定是String的引用地址. StringBuffer则是有个字符缓冲区,所有的操作都是对字符缓冲区中操作.与StringBuilder类似. 1. 在执行速度方面的比较:StringBuilder > StringBuffer 2. StringBuffer与StringBuilder,他们是字符串变量,是可改变的对象,每当我们用它们对字符串做操作时,实际上是在一

JAVA常用类库简介(转)

Java编程语言中为方便学习者学习,编制了许多类,这些类已经经过测试,都是我们编程的基础.如果不利用这些已存在的类,我们的编程工作将变得异常复杂并且效率低下.所以我们应尽可能多的掌握Java基本类库的内容.类库中的类按照其用途归属于不同的包中. 1.java.lang包 java.lang包 是Java中最常用的包,程序不需要注入,就可以使用该包中的类,利用包中的类可以设计最基本的Java程序. 2.java.awt包 java.awt包中的类提供了图形界面的创建方法,包括按钮.文本框.列表框.

031113_【第11章:Java常用类库】_比较器(Comparable、Comparator)

//****ComparatorDemo.java import java.util.* ;class Student{    // 指定类型为Student    private String name ;    private int age ;    public Student(String name,int age){        this.name = name ;        this.age = age ;    }    public boolean equals(Obje

Java常用类库--观察者设计模式( Observable类Observer接口)

原文链接:http://www.2cto.com/kf/201310/253013.html 如果要想实现观察者模式,则必须依靠java.util包中提供的Observable类和Observer接口. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 import java.util.* ; 

Java常用类库之时间操作类——Date、Calendar、DateFormat、SimpleDateFormat及实例操作

学习目标 掌握Date类的使用 可以使用Calendar类取得一个完整的日期 掌握日期格式化的操作 可以使用SimpleDateFormat进行日期的格式化转换操作 编写取得日期的操作类 进一步掌握Calendar类的使用 进一步掌握SimpleDateFormat类的使用 Date类是一个较为常用的类,但是其操作的日期格式会有一些不符合个人要求,而如果想要进一步取得一些自己需要的时间,则可以使用Calendar类. Date类 在java.util包中定义了Date类,Date类本身使用非常简

第08章:java常用类库

本章主要内容: 1. API概述 2.  常用类: Object类/Scanner类 String类/StringBuffer类/StringBuilder类 数组高级和Arrays类 基本类型包装类(Integer,Charater) 正则表达式(Pattern,Matcher) Math类/Random类/System类 BigInteger类/BigDecimal类 Date类/DateFormat类/Calendar类 2:API的概述(了解) (1)应用程序编程接口. (2)就是JDK

Java 常用类库 之 比较类 Comparable

http://www.verejava.com/?id=169930999133100 /** 知识点: 比较类 Comparable 题目: 将某班学生按数学成绩从小到大排序 思路: 1. 抽象出类: 1.1 班级(ClassSet) 1.2 学生(Student) 2. 找出类关系: 2.1 学生 属于 班级 Student -> ClassSet(多对1) 3. 找出类属性: 3.1 ClassSet(班级名称,班级人数) 3.2 Student(学生名称,数学成绩) 4. 找出类方法: