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(Object obj){    // 覆写equals方法
        if(this==obj){
            return true ;
        }
        if(!(obj instanceof Student)){
            return false ;
        }
        Student stu = (Student) obj ;
        if(stu.name.equals(this.name)&&stu.age==this.age){
            return true ;
        }else{
            return false ;
        }
    }
    public void setName(String name){
        this.name = name ;
    }
    public void setAge(int age){
        this.age = age ;
    }
    public String getName(){
        return this.name ;
    }
    public int getAge(){
        return this.age ;
    }
    public String toString(){
        return name + "\t\t" + this.age  ;
    }
};

class StudentComparator implements Comparator<Student>{    // 实现比较器
    // 因为Object类中本身已经有了equals()方法
    public int compare(Student s1,Student s2){
        if(s1.equals(s2)){
            return 0 ;
        }else if(s1.getAge()<s2.getAge()){    // 按年龄比较
            return 1 ;
        }else{
            return -1 ;
        }
    }
};

public class ComparatorDemo{
    public static void main(String args[]){
        Student stu[] = {new Student("张三",20),
            new Student("李四",22),new Student("王五",20),
            new Student("赵六",20),new Student("孙七",22)} ;
        java.util.Arrays.sort(stu,new StudentComparator()) ;    // 进行排序操作
        for(int i=0;i<stu.length;i++){    // 循环输出数组中的内容
            System.out.println(stu[i]) ;
        }
    }
};

//******ComparableDemo01.java

class Student implements Comparable<Student> {    // 指定类型为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 toString(){
        return name + "\t\t" + this.age + "\t\t" + this.score ;
    }
    public int compareTo(Student stu){    // 覆写compareTo()方法,实现排序规则的应用
        if(this.score>stu.score){
            return -1 ;
        }else if(this.score<stu.score){
            return 1 ;
        }else{
            if(this.age>stu.age){
                return 1 ;
            }else if(this.age<stu.age){
                return -1 ;
            }else{
                return 0 ;
            }
        }    
    }
};
public class ComparableDemo01{
    public static void main(String args[]){
        Student stu[] = {new Student("张三",20,90.0f),
            new Student("李四",22,90.0f),new Student("王五",20,99.0f),
            new Student("赵六",20,70.0f),new Student("孙七",22,100.0f)} ;
        java.util.Arrays.sort(stu) ;    // 进行排序操作
        for(int i=0;i<stu.length;i++){    // 循环输出数组中的内容
            System.out.println(stu[i]) ;
        }
    }
};

//***************************************ComparableDemo03.java

class BinaryTree{
    class Node{            // 声明一个节点类
        private Comparable data ;    // 保存具体的内容
        private Node left ;            // 保存左子树
        private Node right ;        // 保存右子树
        public Node(Comparable data){
            this.data = data ;
        }
        public void addNode(Node newNode){
            // 确定是放在左子树还是右子树
            if(newNode.data.compareTo(this.data)<0){    // 内容小,放在左子树
                if(this.left==null){
                    this.left = newNode ;    // 直接将新的节点设置成左子树
                }else{
                    this.left.addNode(newNode) ;    // 继续向下判断
                }
            }
            if(newNode.data.compareTo(this.data)>=0){    // 放在右子树
                if(this.right==null){
                    this.right = newNode ;    // 没有右子树则将此节点设置成右子树
                }else{
                    this.right.addNode(newNode) ;    // 继续向下判断
                }
            }
        }
        public void printNode(){    // 输出的时候采用中序遍历
            if(this.left!=null){
                this.left.printNode() ;    // 输出左子树
            }
            System.out.print(this.data + "\t") ;
            if(this.right!=null){
                this.right.printNode() ;
            }
        }
    };
    private Node root ;        // 根元素
    public void add(Comparable data){    // 加入元素
        Node newNode = new Node(data) ;    // 定义新的节点
        if(root==null){    // 没有根节点
            root = newNode ;    // 第一个元素作为根节点
        }else{
            root.addNode(newNode) ; // 确定是放在左子树还是放在右子树
        }
    }
    public void print(){
        this.root.printNode() ;    // 通过根节点输出
    }
};
public class ComparableDemo03{
    public static void main(String args[]){
        BinaryTree bt = new BinaryTree() ;
        bt.add(8) ;
        bt.add(3) ;
        bt.add(3) ;
        bt.add(10) ;
        bt.add(9) ;
        bt.add(1) ;
        bt.add(5) ;
        bt.add(5) ;
        System.out.println("排序之后的结果:") ;
        bt.print() ;
    }
};

时间: 2024-10-25 21:18:09

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

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. 找出类方法:

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

项目中你不得不知的11个Java第三方类库

项目中你不得不知的11个Java第三方类库 博客分类: Java综合 JavaGoogle框架单元测试Hibernate Java第三方library ecosystem是一个很广阔的范畴.不久前有人撰文:每个项目中,你必须知道的11个Java第三方类库.  单元测试  1.DBUnit  DBunit是一个基于junit扩展的数据库测试框架.它提供了大量的类对与数据库相关的操作进行了抽象和封装. 2.MOckito  Mockito是一个针对Java的mocking框架.你可以使用简洁的API

Google的Java常用类库 Guava资料

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

每个项目中,你必须知道的11个Java第三方类库。

Java第三方library ecosystem是一个很广阔的范畴.不久前有人撰文:每个项目中,你必须知道的11个Java第三方类库. 单元测试 1.DBUnit DBunit是一个基于junit扩展的数据库测试框架.它提供了大量的类对与数据库相关的操作进行了抽象和封装. 2.MOckito Mockito是一个针对Java的mocking框架.你可以使用简洁的API编写出漂亮的测试. 3.Hamcrest Matchers Hamcrest 是一个测试辅助工具,提供了一套通用的匹配符 Matc

Java常用类库之StringBuilder与StringBuffer

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

程序员教程-11章-Java程序设计

自己是学java的,先看第十一章java吧. 列出章节目录,便于自己回忆内容. 11.1 Java语言概述 1 Java语言的特点 2 Java开发环境 11.2 Java语言基础 11.2.1 基本数据类型 1 整数类型及整数的运算 2 浮点数据类型及运算 3 字符数据类型 4 位运算 5 布尔数据类型 11.2.2 控制结构 1 if语句 2 switch语句 3 循环语句 4 跳转语句 11.2.3 Java核心类 1 Object类 2 String类 3 StringBuild字符串

JAVA常用类库简介(转)

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

第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