• 20210120 java.lang.Comparable


    java.lang.Comparable

    基本信息

    • public interface Comparable<T>
    • rt.jar
    • 引入版本:1.2
    • 相关类:java.util.Comparator

    使用说明

    • 此接口对实现该接口的每个类的对象强加了总体排序。此排序称为类的自然排序,而该类的 compareTo 方法被称为其自然比较方法。
    • 实现此接口的对象的列表(和数组)可以由 Collections.sort(和 Arrays.sort)自动排序。实现此接口的对象可以用作排序映射中的键,也可以用作排序集中的元素,而无需指定比较器。
    • 当且仅当 C 类的每一个 e1 和 e2 的 e1.compareTo(e2) == 0 具有与 e1.equals(e2) 相同的布尔值时, C 类的自然序才与 equals 一致。请注意, null 不是任何类的实例,即使 e.equals(null) 返回 falsee.compareTo(null) 也应引发 NullPointerException
    • 强烈建议(尽管不是必需的)自然顺序应与 equals 保持一致。之所以如此,是为了使用集合或 Map 时,表现正常
    • 几乎所有实现 Comparable 的 Java 核心类都具有与 equals 一致的自然顺序。一个例外是 Java.math.BigDecimal ,只有值以及精度都相等 equals 才为 true
    • 该接口是Java Collections Framework的成员。

    接口定义方法

    接口定义方法
    int compareTo(T o)

    int compareTo(T o)

    • 将此对象与指定对象进行比较。当此对象小于,等于或大于指定的对象时,返回负整数,零或正整数。
    • 必须确保所有 x 和 y 的 sgn(x.compareTo(y)) == -sgn(y.compareTo(x))。 (这意味着 x.compareTo(y) 必须抛出异常,而 y.compareTo(x)则抛出异常。)
    • 必须确保该关系是 可传递的(x.compareTo(y)>0 && y.compareTo(z)>0) 意味着 x.compareTo(z)>0
    • 必须确保对于所有 z,x.compareTo(y)==0 意味着 sgn(x.compareTo(z)) == sgn(y.compareTo(z))
    • 强烈建议(但并非严格要求 (x.compareTo(y)==0) == (x.equals(y))任何实现Comparable 接口且违反此条件的类都应明确指出这一事实。

    示例代码

    public class ComparableTest {
        @Test
        public void test() {
            // 只有值以及精度都相等 equals 才为 true
            BigDecimal b1 = new BigDecimal("4.0");
            BigDecimal b2 = new BigDecimal("4.00");
            BigDecimal b3 = new BigDecimal("4.00");
            System.out.println(b1.compareTo(b2));   // 0
            System.out.println(b1.equals(b2));  // false
            System.out.println(b3.compareTo(b2));   // 0
            System.out.println(b3.equals(b2));  // true
    
    
            List<MyComparable> myComparables = Arrays.asList(new MyComparable(5), new MyComparable(4), new MyComparable(3));
            System.out.println("排序前:"+myComparables);   // 排序前:[MyComparable{num=5}, MyComparable{num=4}, MyComparable{num=3}]
            Collections.sort(myComparables);
            System.out.println("排序后:"+myComparables);   // 排序后:[MyComparable{num=3}, MyComparable{num=4}, MyComparable{num=5}]
        }
    }
    
    class MyComparable implements Comparable<MyComparable> {
        private int num;
    
        public MyComparable(int num) {
            this.num = num;
        }
    
        @Override
        public int compareTo(MyComparable other) {
            return num - other.num;
        }
    
        @Override
        public String toString() {
            return "MyComparable{" + "num=" + num + '}';
        }
    }
    
  • 相关阅读:
    C# DataGridView 与 datatable 之间数据传递
    C# 调用命令行命令 net use
    C# 链接 sql server 数据库字符串
    winform窗口关闭,进程没有关掉的解决办法
    select 中的逻辑判断 sql server
    C#中的abstract 类和方法!!!
    c# ComboBox绑定枚举
    C#与C++类型互转
    DllImport
    TCP三次握手四次挥手详解
  • 原文地址:https://www.cnblogs.com/huangwenjie/p/14296606.html
Copyright © 2020-2023  润新知