Comparable,Comparator(interface);

转载 2018年04月16日 20:52:47
Comparable是排序接口。若一个类实现了Comparable接口,就意味着该类支持排序。实现了Comparable接口的类的对象的列表或数组可以通过Collections.sort或Arrays.sort进行自动排序。

  此外,实现此接口的对象可以用作有序映射中的键或有序集合中的集合,无需指定比较器。该接口定义如下:

package java.lang;import java.util.*;public interface Comparable<T> {    public int compareTo(T o);}
//下面例子
import java.util.Arrays;

public class Person implements Comparable<Person>
{
    String name;
    int age;
    public Person(String name, int age)
    {
        super();
        this.name = name;
        this.age = age;
    }
    public String getName()
    {
        return name;
    }
    public int getAge()
    {
        return age;
    }
    //@Override
    public int compareTo(Person p)
    {
        return this.age-p.getAge();
    }
    public static void main(String[] args)
    {
        Person[] people=new Person[]{new Person("xujian", 20),new Person("xiewei", 10)};
        System.out.println("排序前");
        for (Person person : people)
        {
            System.out.print(person.getName()+":"+person.getAge());
        }
        int a[]=new int[] {1,2,3};
        Arrays.sort(a);
        //Arrays.sort只能排序数组,对于类数组,用到Comparable接口里的compareTo函数,顺带一提comparaTo须重定义,否则默认字符串Ascii比较。
        Arrays.sort(people);
        System.out.println("\n排序后");
        for (Person person : people)
        {
            System.out.print(person.getName()+":"+person.getAge());
        }
    }
}
Comparator是比较接口,我们如果需要控制某个类的次序,而该类本身不支持排序(即没有实现Comparable接口),那么我们就可以建立一个“该类的比较器”来进行排序,这个“比较器”只需要实现Comparator接口即可。也就是说,我们可以通过实现Comparator来新建一个比较器,然后通过这个比较器对类进行排序。该接口定义如下:
package java.util;
public interface Comparator<T>
 {
    int compare(T o1, T o2);
    boolean equals(Object obj);
 }

注意:1、若一个类要实现Comparator接口:它一定要实现compare(T o1, T o2) 函数,但可以不实现 equals(Object obj)

import java.util.Arrays;
import java.util.Comparator;

class PersonCompartor implements Comparator<person1>
{
    @Override
    public int compare(person1 o1, person1 o2)
    {
        return o1.getAge()-o2.getAge();
    }
}
public class person1
{
    String name;
    int age;
    public person1(String name, int age)
    {
        super();
        this.name = name;
        this.age = age;
    }
    public String getName()
    {
        return name;
    }
    public int getAge()
    {
        return age;
    }
    public static void main(String[] args)
    {
        person1[] people=new person1[]{new person1("xujian", 20),new person1("xiewei", 10)};
        System.out.println("排序前");
        for (person1 person : people)
        {
            System.out.print(person.getName()+":"+person.getAge());
        }
        //同Person类,Arrays.sort()需要协同比较器Comparator;
        Arrays.sort(people,new PersonCompartor());
        System.out.println("\n排序后");
        for (person1 person : people)
        {
            System.out.print(person.getName()+":"+person.getAge());
        }
    }
}

另外Comparable可以在一个函数单独做一个类,里面有compareTo()函数
import java.util.Date;
public class lab{
  public static Comparable max(Comparable a[]){
    Comparable mix=a[0];
    for(int i=1;i<a.length;i++)
      if(mix.compareTo(a[i])<0)
        mix=a[i];
    return mix;
  }
  public static void main(String args[]){
    Comparable a[][]=new Comparable[][] {
       {"a","b","c","d","e","f","h","i","k","j"},
       {1,2,3,4,5,6,7,8,9,10},
       {new Date(),new Date(),new Date(),new Date(),new Date(),
                            new Date(),new Date(),new Date(),new Date(),new Date()}};
    for(int i=0;i<a.length;i++)
      System.out.println("max:"+max(a[i]));
     
  }
}


Comparable与Comparator浅析

  今天博主在翻阅TreeMap的源码,发现其键必须是实现Comparable或者Comparator的接口时产生了一些兴趣,比如在TreeMap中的put方法分别对Comparable和Compar...
  • u013256816
  • u013256816
  • 2016-03-15 19:56:41
  • 10833

java Comparable 和Comparator详解及 区别(附代码)

java中,对集合对象或者数组对象排序,有两种实现方式。 即:(1)对象实现Comparable 接口         (2)定义比较器,实现Comparator接口。 下面会简要介绍这两种方法...
  • tolcf
  • tolcf
  • 2016-08-17 15:05:05
  • 4416

ArrayList容器排序 comparator接口与comparable接口的使用

1、实体类实现comparable接口,重写compareTo方法 package io; import java.text.DateFormat; import java.text.ParseEx...
  • chunxiaqiudong5
  • chunxiaqiudong5
  • 2016-10-08 20:03:17
  • 1208

Java中Comparable和Comparator的用法

对于自己定义的数据结构,进行排序时,需要我们给予他一定的排序规则,这就涉及到了Java中的两个常用的接口Comparable和Comparator的实现。 * Comparable public i...
  • yguoelect
  • yguoelect
  • 2017-08-20 22:10:49
  • 713

Comparable和Comparator区分以及使用

前言Comparable和Comparator都是java提供的一个接口,它们应用的场景是在数组的排序中,比如Collection这个接口提供了一个sort的方法,里面可以使用这两个接口的实现类来完成...
  • sgls652709
  • sgls652709
  • 2015-09-04 04:47:56
  • 726

Java中Comparable和Comparator区别

Comparable只有一个方法 public int compareTo(T o);compareTo方法的返回值是int,有三种情况:1、比较者(调用compareTo方法者)大于被比较者(也就...
  • JQ_AK47
  • JQ_AK47
  • 2017-03-10 19:01:15
  • 1818

浅谈Java比较器comparable/comparator

在笔者学习比较器的过程中,学了就忘,忘了就学,这效率实在是太过低下。笔者思量了会儿,辗转反侧究其原因,才知这比较器的知识在Java大家族中”地位”过低,让人不得不忽略它.这就像是一浪荡男儿常年混迹在花...
  • qq_37014990
  • qq_37014990
  • 2017-04-30 15:16:03
  • 324

比较器(Comparable、Comparator)类及 二叉树的排序算法!!

之前Arrays 类中存在sort() 方法, 此方法可以直接对 对象数组进行排序。  1.Comparable接口 可以直接使用java.util.Arrays 类进行数组的排序操作,但对象所在...
  • hanshileiai
  • hanshileiai
  • 2011-08-22 09:21:14
  • 2398

JAVA Comparable 和Comparator用法

JAVA Comparable 和Comparator用法--转载 名人名言:人类最大的不幸是他没有像眼睑制动器那样器官,使他能在需要时遮住或阻遏一种思想或所有的思想。 ——瓦莱里 ...
  • cuiyong314
  • cuiyong314
  • 2012-05-15 21:49:51
  • 4480

Comparator和Comparable排序

Java API针对集合类型排序提供了两种支持: java.util.Collections.sort(java.util.List)  java.util.Collections.sort(java...
  • eyishion
  • eyishion
  • 2015-09-21 21:57:49
  • 1086
收藏助手
不良信息举报
您举报文章:Comparable,Comparator(interface);
举报原因:
原因补充:

(最多只允许输入30个字)