Java_比较器

Posted 小企鹅推雪球!

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java_比较器相关的知识,希望对你有一定的参考价值。

Java_比较器

  1. Java实现对象排序的方式有两种:自然排序和定制排序

Java_自然排序:java.lang.Comparable

  1. Comparable接口强行对实现它的每个类的对象进行整体排序。这种排序被称为类的自然排序。
  2. 实现 Comparable 的类必须实现 compareTo(Object obj)方法,两个对象即 通过 compareTo(Object obj)方法的返回值来比较大小。
  3. 如果当前对象this大于形参对象obj,则返回正整数,如果当前对象this小于形参对象obj,则返回负整数,如果当前对象this等于形参对象obj,则返回零。
  4. 实现Comparable接口的对象列表(和数组)可以通过 Collections.sortArrays.sort进行自动排序。实现此接口的对象可以用作有序映射中的键或有序集合中的元素,无需指定比较器。
  5. 对于类 C 的每一个e1 和 e2实例来说,当且仅当e1.compareTo(e2) == 0 与 e1.equals(e2)具有相同的boolean 值时,类 C 的自然排序才叫做与 equals
    一致。建议(虽然不是必需的)最好使自然排序与 equals 一致。

Java_Comparable的实现

  1. Comparable的典型实现:(默认都是从小到大排列的)
  2. String:按照字符串中字符的Unicode值进行比较
  3. Character:按照字符的Unicode值来进行比较
  4. 数值类型对应的包装类以及BigInteger、BigDecimal:按照它们对应的数值大小进行比较
  5. Boolean:true 对应的包装类实例大于 false对应的包装类实例
  6. Date、Time等:后面的日期时间比前面的日期时间大
package Java_9;

import java.util.Arrays;
public class Comparable {
    public static void main(String[] args) {

        String [] all = new String[4];
        all[0] = "《红楼梦》";
        all[1] = "《西游记》";
        all[2] = "《三国演义》";
        all[3] = "《水浒传》";
        Arrays.sort(all);
        System.out.println(Arrays.toString(all));
    }

Java_定制排序java.util.Comparator

  1. 当元素的类型没有实现java.lang.Comparable接口而又不方便修改代码,
    或者实现了java.lang.Comparable接口的排序规则不适合当前的操作,那
    么可以考虑使用Comparator的对象来排序,
  2. java.util.Comparator强行对多个对象进行整体排序的比较。
  3. 重写compare(Object o1,Object o2)方法,比较o1和o2的大小如果方法返 回正整数,则表示o1大于o2如果返回0,表示相等返回负整数,表示o1小于o2。
  4. 可以将 Comparator传递给 sort方法(如 Collections.sort 或 Arrays.sort),从而允许在排序顺序上实现精确控制。
  5. 还可以使用 Comparator 来控制某些数据结构(如有序 set或有序映射)的
    顺序,或者为那些没有自然顺序的对象collection提供排序。

Java_System类

  1. System类代表系统,系统级的很多属性和控制方法都放置在该类的内部。该类位于java.lang包。
  2. System类的构造器是private的,所以无法创建该类的对象,也就是无法实
    例化该类。
  3. System类内部的成员变量和成员方法都是static的,所以也可以很方便的进行调用。
  4. System类成员变量:System类内部包含in、out和err三个成员变量,分别代表标准输入流(键盘输入),标准输出流(显示器)和标准错误输出流(显示器)
  5. System类成员方法native long currentTimeMillis():该方法的作用是返回当前的计算机时间,时间的表达格式为当前计算机时间和GMT时间(格林威治时间)1970年1月1号0时0分0秒所差的毫秒数。
  6. System类void exit(int status):该方法的作用是退出程序。其中status的值为0代表正常退出,非零代表
    异常退出。使用该方法可以在图形界面编程中实现程序的退出功能等。
  7. System类void gc():该方法的作用是请求系统进行垃圾回收。至于系统是否立刻回收,则取决于系统中垃圾回收算法的实现以及系统执行时的情况。
  8. String getProperty(String key):该方法的作用是获得系统中属性名为key的属性对应的值。系统中常见的属性名以及属性的作用如下表所示:

Java_Math类

  1. java.lang.Math提供了一系列静态方法用于科学计算。其方法的参数和返回
    值类型一般为double型。
  2. abs 绝对值
  3. sqrt 平方根
  4. pow(double a,doble b) a的b次幂
  5. log 自然对数
  6. max(double a,double b)
  7. min(double a,double b)
  8. random() 返回0.0到1.0的随机数

Java_BigInteger类

  1. java.math包的BigInteger可以表示不可变的任意精度的整数。BigInteger 提供所有 Java 的基本整数操作符的对应物,并提供 java.lang.Math 的所有相关方法

构造器
BigInteger(String val):根据字符串构建BigInteger对象

常用方法

  1. public BigInteger abs():返回此 BigInteger 的绝对值的 BigInteger。`
  2. BigInteger add(BigInteger val) :返回其值为 (this + val) 的 BigInteger
  3. BigInteger subtract(BigInteger val) :返回其值为 (this - val) 的 BigInteger
  4. BigInteger multiply(BigInteger val) :返回其值为 (this * val) 的 BigInteger
  5. BigInteger divide(BigInteger val) :返回其值为 (this / val) 的 BigInteger。整数相除只保留整数部分。
  6. BigInteger remainder(BigInteger val) :返回其值为 (this % val) 的 BigInteger。
  7. BigInteger[] divideAndRemainder(BigInteger val):返回包含 (this / val) 后跟(this % val) 的两个 BigInteger 的数组。
  8. BigInteger pow(int exponent) :返回其值为 (thisexponent) 的 BigInteger。

Java_BigDecimal类

  1. 一般的Float类和Double类可以用来做科学计算或工程计算,但在商业计算中,要求数字精度比较高,故用到java.math.BigDecimal类。
  2. BigDecimal类支持不可变的、任意精度的有符号十进制定点数。

构造器

  1. public BigDecimal(double val)
  2. public BigDecimal(String val)

** 常用方法**

  1. public BigDecimal add(BigDecimal augend)
  2. `public BigDecimal subtract(BigDecimal subtrahend)``
  3. public BigDecimal multiply(BigDecimal multiplicand)
  4. public BigDecimal divide(BigDecimal divisor, int scale, int roundingMode)
		BigInteger bi = new BigInteger("12433241123");
        BigDecimal bd = new BigDecimal("12435.351");
        BigDecimal bd2 = new BigDecimal("11");
        System.out.println(bi);
// System.out.println(bd.divide(bd2));
        System.out.println(bd.divide(bd2, BigDecimal.ROUND_HALF_UP));
        System.out.println(bd.divide(bd2, 15, BigDecimal.ROUND_HALF_UP));

以上是关于Java_比较器的主要内容,如果未能解决你的问题,请参考以下文章

这些 C++ 代码片段有啥作用?

[AndroidStudio]_[初级]_[配置自动完成的代码片段]

VSCode 配置 用户自定义代码片段 自定义自动代码补充

[AndroidStudio]_[初级]_[配置自动完成的代码片段]

[AndroidStudio]_[初级]_[配置自动完成的代码片段]

java代码在片段活动中不起作用