对象比较器:Comparable和Comparator

在进行对象数组排序的过程中需要使用到比较器,比较器有两个:Comparable和Comparator

java.lang.Comparable:是在类定义是时候默认实现好的接口,里面提供有一个compareTo()方法用于大小比较

java规定:假如a和b是实现Comparable接口类创建的两个对象,

当a.compareTo(b)<0时,称a小于b;

a.compareTo(b)>0时,称a大于b;

a.compareTo(b)==0时,称a等于b。

java.util.Comparator:需要单独定义一个排序的比较规则类,里面有两个方法compare(),equals()

优先使用Comparable

package com.wzy.main;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.Iterator;
import java.util.List;
import java.util.TreeSet;

import org.omg.PortableInterceptor.Interceptor;
class People implements Comparable{
    People(String name,int age){
        this.name = name;
        this.age = age;
    }
    private String name;
    private int age;
    public int getAge() {
        return age;
    }
    public String getName() {
        return name;
    }
    @Override
    public String toString() {
        return "name="+name+", age="+age;
    }
    @Override
    public int compareTo(Object o) {
        People p = (People)o;
        return p.age-this.age;
    }
}

//使用Comparator比较器
class PersonComparator implements Comparator {
    @Override
    public int compare(Object one, Object another) {
         return ((People)one).getAge()-((People)another).getAge();
    }

}
public class Test01 {
public static void main(String[] args) {

    List<People> list = new ArrayList<People>();
    list.add(new People("aaa", 15));
    list.add(new People("bbb", 10));
    list.add(new People("ccc", 16));
    list.add(new People("ddd", 13));
    list.add(new People("eee", 19));
    //Collections.sort(list);//按照age进行排序,使用Comparable
    Collections.sort(list, new PersonComparator());//使用Comparator比较器,按照age进行排序
    Iterator<People> interceptor =  list.iterator();
    while(interceptor.hasNext()){
        System.out.println(interceptor.next());
    }

}
}
时间: 2024-08-26 16:31:41

对象比较器:Comparable和Comparator的相关文章

数组对象排序:Comparable和Comparator

相同: Comparable和Comparator都是用来实现对象的比较.排序 要想对象比较.排序,都需要实现Comparable或Comparator接口 Comparable和Comparator都是Java的接口 不同: Comparator位于java.util包下,而Comparable位于java.lang包下 Comparable接口的实现是在类的内部(如 String.Integer已经实现了Comparable接口,自己就可以完成比较大小操作),Comparator接口的实现是

java对象比较器和克隆

一.比较器Comparable和Comparator 上一篇博客介绍了工具类Arrays工具类 .我们可以对基本类型的数组调用Arrays.sort()函数来进行数组的排序.排序操作在日常开发中经常要使用到.那么String类和自定义类能不能使用Arrays.sort()来进行排序呢.下面我们来试试,如下: Java代码 publicclassMystring { publicstaticvoidmain(String[] args) { String []a={"早上","

【java对象比较器和克隆】

一.比较器Comparable和Comparator 上一篇博客介绍了工具类Arrays工具类.我们可以对基本类型的数组调用Arrays.sort()函数来进行数组的排序.排序操作在日常开发中经常要使用到.那么String类和自定义类能不能使用Arrays.sort()来进行排序呢.下面我们来试试,如下: public class Mystring { public static void main(String[] args) { String []a={"早上","中午&

【转】:浅析 Comparable和 Comparator的区别

简介Comparable和 Comparator都是java.util包下的两个接口,从字面上看这两个接口都是用来做比较用的,但是jdk里面不可能定义两个功能相同的接口,所以他们肯定有不同的用处. 1.Comparable1.1 说明Comparable可以认为是一个内比较器,实现了Comparable接口的类有一个特点,就是这些 类是可以和自己比较的,至于具体和另一个实现了Comparable接口的类如何比较,则依赖compareTo方法的实现,compareTo方法也被称为自然比较方法.如果

Java核心API -- 7(Iterator迭代器、Comparable、Comparator比较器)

1. Iterator迭代器 所有Collection的实现类都实现了iterator方法,该方法返回一个Iterator接口类型的对象,用于实现对集合元素迭代的便利.在java.util包下. 1)Iterator定义有三个方法: ①boolean hasNext()方法:判断指针后面是否有元素. ②E next()方法:指针后移,并返回当前元素.E代表泛型,默认为Object类型. ③void remove()方法:在原集合中删除刚刚返回的元素. 2)对于List集合而言,可以通过基于下标的

对象大小对比之Comparable与Comparator

一 概述 1.Comparable与Comparator使用背景 数值型数据(byte int short long float double)天生可对比大小,可排序,String实现了Comparable接口也可以对比大小与排序,而自定义类多种多样,没有一个共有的可以用作排序的指标,因此需要在自定义类中手动建立对比的方法,出于这个目的,java提供了两个接口Comparable与Comparator. 2.集合排序 Collections.sort()底层排序依靠的是Arrays.sort()

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

之前Arrays 类中存在sort() 方法, 此方法可以直接对 对象数组进行排序. 1.Comparable接口 可以直接使用java.util.Arrays 类进行数组的排序操作,但对象所在的类必须实现Comparable 接口,用于指定排序接口. Comparable 接口定义如下: public interface Comparable<T>{ public int compareTo(T o); } 此方法返回一个int 类型的数据,但是此int 的值只能是以下三种: 1:表示大于

Java中Comparable和Comparator实现对象比较

1.通过Comparable实现排序 package Comparable; import java.util.Arrays; public class ComparableUser implements Comparable<ComparableUser> { private String id; private int age; public ComparableUser(String id, int age) { this.id = id; this.age = age; } publi

JAVA笔记10__Math类、Random类、Arrays类/日期操作类/对象比较器/

/** * Math类.Random类.Arrays类:具体查JAVA手册...... */ public class Main { public static void main(String[] args) { String[] s1 = {"a","b","c","d","e"}; String[] s2 = {"a","b","c",&qu