zoukankan      html  css  js  c++  java
  • 比较器(Comparable、Comparator)

    Comparable接口的作用

    之前Arrays类中存在sort()方法,此方法可以直接对对象数组进行排序。

     

    Comparable接口

    可以直接使用java.util.Arrays类进行数组的排序操作,但对象所在的类必须实现Comparable接口,用于指定排序接口。

    Comparable接口的定义如下:

    public  interface  Comparable{

            public  int compareTo(T  o);

    }

    此方法返回一个int类型的数据,但是此int的值只能是一下三种:

    1:表示大于

    -1:表示小于

    0:表示相等

     

    要求:定义一个学生类,里面有姓名,年龄,成绩三个属性,要求按成绩由高到低排序,如果成绩相等,则按照年龄由低到高排序。

    [java] package com.itmyhome; 
     
    import java.util.Arrays; 
     
    class Student implements Comparable{ 
        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; 
       
         
        @Override 
        public int compareTo(Student stu) {  //覆写compareTo方法实现排序规则的应用  
            if(this.score>stu.score){ 
                return -1; 
            }else if(this.score
                return 1; 
            }else{ 
                if(this.age>stu.age){ 
                    return 1; 
                }else if(this.age
                    return -1; 
                }else{ 
                    return 0; 
               
           
       
         
        public String toString(){ 
            return "姓名:"+this.name+", 年龄:"+this.age+", 成绩:"+this.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; 
          
         
    }


     

    另一种比较器:Compartor

    如果一个类已经开放完成,但是在此类建立的初期并没有实现Comparable接口,此时肯定是无法进行对象排序操作的,所以为了解决这一的问题,java又定义了另一个比较器的操作接口 Comparator 此接口定义在java.util包中,接口定义如下:

    public  interface  Comparator{

                    public  int  compare(T o1,T o2);

                     boolean  equals(Object  obj);

    }

    MyComparator.java

    [java package com.itmyhome; 
     
    import java.util.Comparator; 
     
    public class MyComparator implements Comparator {  //实现比较器  
     
        @Override 
        public int compare(Student stu1, Student stu2) { 
            // TODO Auto-generated method stub  
            if(stu1.getAge()>stu2.getAge()){ 
                return 1; 
            }else if(stu1.getAge()
                return -1; 
            }else{ 
                return 0; 
           
       
    }

    [java] package com.itmyhome;

    import java.util.ArrayList; 
    import java.util.Arrays; 
    import java.util.Collections; 
    import java.util.List; 
     
    class Student { 
        private String name; 
        private int age; 
         
        public Student(String name,int age ){ 
            this.name = name; 
            this.age = age; 
       
         
        public String toString(){ 
            return "姓名:"+this.name+", 年龄:"+this.age; 
       
         
        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 class T { 
        public static void main(String[] args) throws Exception{ 
            Student stu[] = {new Student("张三",23) 
                            ,new Student("李四",26) 
                            ,new Student("王五",22)}; 
            Arrays.sort(stu,new MyComparator());             //对象数组进行排序操作  
             
            List list = new ArrayList(); 
            list.add(new Student("zhangsan",31)); 
            list.add(new Student("lisi",30)); 
            list.add(new Student("wangwu",35)); 
            Collections.sort(list,new MyComparator());      //List集合进行排序操作  
             
            for (int i = 0; i < stu.length; i++) { 
                Student s = stu[i]; 
                System.out.println(s); 
           
             
            System.out.println("*********"); 
             
            for (int i=0;i
                Student s = list.get(i); 
                System.out.println(s); 
           
       
    }


  • 相关阅读:
    理解ORM的前提:数据库中的范式和约束
    C#复习笔记(4)--C#3:革新写代码的方式(查询表达式和LINQ to object(下))
    设置或者得到CheckBoxList选中了的值
    Gridview中Datakeys 通过主键取得各列的值。
    如何直接在网页中显示PDF文件
    C#日期格式化
    asp.net 基础知识
    WebServers 异步
    asp.net中异步调用webservice
    C#中哈希表(HashTable)的用法详解
  • 原文地址:https://www.cnblogs.com/luckForever/p/7254449.html
Copyright © 2011-2022 走看看