Comparable<T> 和 Comparato<T>

相同点:

  Comparable<T> 和 Comparator<T>都是接口

不同点:

  两者声明的方法不同。前者是compareTo()方法,后者是compare()方法。

    Comparable<T>此接口是由具体某个有实际意义的类来实现,指示出此类的对象有什么样的排序方法。下面的苹果

public class Apple implements Comparable<Apple> {
    /**
     * 苹果的重量
     */
    private int  weight;

    /**
     * 自然排序即从小到大
     * 返回1的,代表此对象比参数对象大,排在后面,这样就可以控制降序或升序排列
     */
    @Override
    public int compareTo(Apple apple) {
        if (this.weight > apple.getWeight())
        {
            return -1;
        }
        else if (this.weight < apple.getWeight())
        {
            return 1;
        }
        else
        {
            return 0;
        }
    }}

上面的例子中,苹果重量轻的将排在后面,所以是降序排列。

    Comparator<T>此接口一般用来的定义比较器,不会由包含实际意义的类来实现,而是由具体比较器来实现。下面定义一个比较器:

public class WeightComparator implements Comparator<Apple> {
    /**
     * 苹果的重量
     */
    private int  weight;

    /**
     * 自然排序即从小到大
     * 返回1的,代表此对象比参数对象大,排在前面,这样就可以控制降序或升序排列
     */
    @Override
    public int compare(Apple a, Apple b) {
        if (a.getWeight() > b.getWeight())
        {
            return 1;
        }
        else if (a.getWeight() < b.getWeight())
        {
            return -1;
        }
        else
        {
            return 0;
        }
    }

    public static void main(String[] args)
    {
        Apple a = new Apple();
        Apple b = new Apple();
        Apple c = new Apple();
        a.setWeight(50);
        b.setWeight(150);
        c.setWeight(100);

        Apple[] apples = {a,b, c};
        Arrays.sort(apples, new WeightComparator());
        //50 100 150
        System.out.println("" + apples[0] + apples[1] + apples[2]);
    }
}

上面的例子定义了一个重量比较器,我把它用来比较苹果的重量,即使用泛型

public class WeightComparator implements Comparator<Apple>
时间: 2024-10-10 09:45:06

Comparable<T> 和 Comparato<T>的相关文章

java: Comparable比较器,定义二叉操作类

//定义二叉操作类 class BinaryTree{ class Node{ private Node left; //左指数 private Node right; //右指数 private Comparable data; public Node(Comparable<?> data) { this.data = data; } //二叉数据比较,大的放在右边,小的放在左边 public void addNode(Node newNode) { //放在左边 if( newNode.d

第十二条:考虑实现Comparable接口

与前面讨论的方法不同,compareTo()方法并没有在Object类中定义.相反,它是Comparable接口中唯一的方法. 一个类的实例对象要想是可以比较大小的,那么这个类需要实现Comparable接口,必须正确的实现compareTo()方法. 一个类实现了Comparable接口,就表明这个类的实例对象具有内在的排序关系. 一旦类实现了Comparable接口,那么这个类就可以和依赖于该接口的集合实现进行协作,实现强大的功能. JDK中的所有值类,String类都已经实现了Compar

Java-集合的总结

Collection:接口 只有通过Collection接口中toString()进行重写,才能够System.out.print(coll)显示Collection集合中元素 |-----Set:元素无序,不可重复的集合 |---hashSet(主要实现类) +LinkedHashSet(添加顺序遍历集合中元素)+TreeSet   Set 使用的方法基本上Collection接口下定义;   无序:元素底层存储的位置无序的,不重复性:添加相同元素无法添加进去       HashSet(自定

Java 之 集合框架(JCF)

1.集合框架 a.框架:为了实现某一目的或功能,而预先提供的一系列封装好的.具有继承或实现关系的类与集合 b.集合:①定义:Java中对一些数据结构和算法进行封装,即封装(集合也是一种对象) ②特点:元素类型可以不同,集合长度可变,空间不固定 c.集合框架:提供了管理集合的接口和类 2.Collection 与 Collections a.Collection:是一个接口,装东西的集合接口 (核心接口) b.Collections:是一个算法类,操作即可的算法类 3.Collection Col

Java集合类总结 (三)

HashSet类 关于HashMap的实现细节 HashMap是用LinkedList实现的,每个list被称为一个桶(bucket),在hashmap中要查找一个元素,首先对传入的key进行散列,并根据散列函数(最简单的散列函数是取余运算)找到是哪个桶,然后在顺着桶的linkedlist寻找这个key.向HashMap插入一个元素时也一样,先算散列函数,应该存在到哪个桶上,如果这个桶上没有存任何元素,就叫没有散列冲突(hash collision),那直接存进去即可.如果发生了冲突,即已经有元

集合接口一

容器(Collection)数组是一种容器, 集合也是一种容器java编程中, 装其他各种各样的对象(引用类型)的一种东西, 叫容器 (图书馆里所有的书, 要想管理图书馆里所有的书, 就需要先把这些书放到一个东西里面, 目前掌握的知识来说, 只能是数组,数组的长度是固定的, 这就出现一个问题, 数组的长度该定义成多长 ? 长度是不固定的, 因为不知道有多少本书, 这个时候需要这样一种机制: 定义一种东西, 长度不固定, 可以随时添加和删除, 这种东西就是Collection, 只要不超出内存,

java基础之容器、集合、集合常用方法

一.容器(Collection):数组是一种容器,集合也是一种容器 java编程中,装其他各种各样的对象(引用类型)的一种东西,叫容器 注意: 1.数组的长度是固定的 2.集合:长度不固定, 可以随时添加和删除,只要不超出内存, 随便往里添加 二.集合接口(六大接口) 1.Collection(包括List接口和Set接口) List---(有顺序, 可以重复-->可以互相equals(引用类型))---下标(重复的标准就是相互equals) LinkedList(链表)---(改快,查慢) *

Java之集合初探(一)

一.集合概述.区别 集合是一种容器,数组也是一种容器 在Java编程中,装各种各样的对象(引用类型)的叫做容器. 为什么出现集合类? 面向对象语言对事物的体现都是以对象的形式,所以为了方便对多个对象的操作,Java就提供了集合类. 数组和集合类同是容器,有何不同? A:长度区别 数组的长度固定 集合长度可变B:内容不同 数组存储的是同一种类型的元素 而集合可以存储不同类型的元素C:元素的数据类型问题 数组可以存储基本数据类型,也可以存储引用数据类型 集合只能存储引用类型 集合类的特点 集合只用于

java学习笔记(Core Java) 6接口与内部类

接口(实现C++的多继承,同时避免了虚继承)深拷贝与浅拷贝内部类代理 一.接口与泛型接口:提供一组行为规范public interface Comparable<T>{ int compareTo(T other)}...int conpareTo<Employee other> //指定T 接口中所有的方法自动属于public所有的域自动为public staic 接口中的域自动声明为 public static final 继承接口的关键字:implements1.接口提供方法