Java_比较器
Posted 小企鹅推雪球!
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java_比较器相关的知识,希望对你有一定的参考价值。
文章目录
Java_比较器
- Java实现对象排序的方式有两种:自然排序和定制排序
Java_自然排序:java.lang.Comparable
Comparable
接口强行对实现它的每个类的对象进行整体排序。这种排序被称为类的自然排序。- 实现
Comparable
的类必须实现compareTo(Object obj)
方法,两个对象即 通过compareTo(Object obj)
方法的返回值来比较大小。 - 如果当前对象
this
大于形参对象obj
,则返回正整数,如果当前对象this
小于形参对象obj
,则返回负整数,如果当前对象this
等于形参对象obj
,则返回零。 - 实现
Comparable
接口的对象列表(和数组)可以通过Collections.sort
或Arrays.sort
进行自动排序。实现此接口的对象可以用作有序映射中的键或有序集合中的元素,无需指定比较器。 - 对于类 C 的每一个
e1 和 e2
实例来说,当且仅当e1.compareTo(e2) == 0 与 e1.equals(e2)
具有相同的boolean
值时,类 C 的自然排序才叫做与equals
一致。建议(虽然不是必需的)最好使自然排序与equals
一致。
Java_Comparable的实现
Comparable
的典型实现:(默认都是从小到大排列的)- String:按照字符串中字符的Unicode值进行比较
Character
:按照字符的Unicode值来进行比较- 数值类型对应的包装类以及
BigInteger、BigDecimal
:按照它们对应的数值大小进行比较 Boolean:true
对应的包装类实例大于false
对应的包装类实例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
- 当元素的类型没有实现
java.lang.Comparable
接口而又不方便修改代码,
或者实现了java.lang.Comparable
接口的排序规则不适合当前的操作,那
么可以考虑使用Comparator
的对象来排序, java.util.Comparator
强行对多个对象进行整体排序的比较。- 重写
compare(Object o1,Object o2)
方法,比较o1和o2的大小
:如果方法返 回正整数,则表示o1大于o2
;如果返回0,表示相等
;返回负整数,表示o1小于o2。
- 可以将
Comparator
传递给sort
方法(如 Collections.sort 或 Arrays.sort),
从而允许在排序顺序上实现精确控制。 - 还可以使用
Comparator
来控制某些数据结构(如有序 set或有序映射)的
顺序,或者为那些没有自然顺序的对象collection
提供排序。
Java_System类
System类
代表系统,系统级的很多属性和控制方法都放置在该类的内部。该类位于java.lang
包。System类
的构造器是private
的,所以无法创建该类的对象,也就是无法实
例化该类。System类
内部的成员变量和成员方法都是static
的,所以也可以很方便的进行调用。System类
成员变量:System类
内部包含in、out和err
三个成员变量,分别代表标准输入流(键盘输入),标准输出流(显示器)和标准错误输出流(显示器)
。System类
成员方法native long currentTimeMillis()
:该方法的作用是返回当前的计算机时间,时间的表达格式为当前计算机时间和GMT时间(格林威治时间)1970年1月1号0时0分0秒所差的毫秒数。System类
的void exit(int status)
:该方法的作用是退出程序。其中status
的值为0代表正常退出,非零代表
异常退出。使用该方法可以在图形界面编程中实现程序的退出功能等。System类
的void gc():
该方法的作用是请求系统进行垃圾回收。至于系统是否立刻回收,则取决于系统中垃圾回收算法的实现以及系统执行时的情况。String getProperty(String key)
:该方法的作用是获得系统中属性名为key的属性对应的值。系统中常见的属性名以及属性的作用如下表所示:
Java_Math类
- java.lang.Math提供了一系列静态方法用于科学计算。其方法的参数和返回
值类型一般为double型。 abs 绝对值
sqrt 平方根
pow(double a,doble b) a的b次幂
log 自然对数
max(double a,double b)
min(double a,double b)
random() 返回0.0到1.0的随机数
Java_BigInteger类
- java.math包的BigInteger可以表示不可变的任意精度的整数。BigInteger 提供所有 Java 的基本整数操作符的对应物,并提供 java.lang.Math 的所有相关方法
构造器
BigInteger(String val):根据字符串构建BigInteger对象
常用方法
public BigInteger abs()
:返回此 BigInteger 的绝对值的 BigInteger。`BigInteger add(BigInteger val) :返回其值为 (this + val) 的 BigInteger
BigInteger subtract(BigInteger val) :返回其值为 (this - val) 的 BigInteger
BigInteger multiply(BigInteger val) :返回其值为 (this * val) 的 BigInteger
BigInteger divide(BigInteger val) :返回其值为 (this / val) 的 BigInteger。
整数相除只保留整数部分。BigInteger remainder(BigInteger val) :返回其值为 (this % val) 的 BigInteger。
BigInteger[] divideAndRemainder(BigInteger val):返回包含 (this / val) 后跟(this % val) 的两个 BigInteger 的数组。
BigInteger pow(int exponent) :返回其值为 (thisexponent) 的 BigInteger。
Java_BigDecimal类
- 一般的Float类和Double类可以用来做科学计算或工程计算,但在商业计算中,要求数字精度比较高,故用到java.math.BigDecimal类。
BigDecimal
类支持不可变的、任意精度的有符号十进制定点数。
构造器
public BigDecimal(double val)
public BigDecimal(String val)
** 常用方法**
public BigDecimal add(BigDecimal augend)
- `public BigDecimal subtract(BigDecimal subtrahend)``
public BigDecimal multiply(BigDecimal multiplicand)
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_比较器的主要内容,如果未能解决你的问题,请参考以下文章
[AndroidStudio]_[初级]_[配置自动完成的代码片段]
[AndroidStudio]_[初级]_[配置自动完成的代码片段]