常用API - Arrays、Math、Object
Arrays类
概述
此类包含用来操作数组(比如排序和搜索)的各种方法。此类还包含一个允许将数组作为列表来查看的静态工厂。
除非特别注明,否则如果指定数组引用为 null,则此类中的方法都会抛出 NullPointerException
。
此类的方法都是静态方法,通过类名直接调用。
静态方法
方法摘要 | 描述 |
---|---|
static <T> List<T> asList(T... a) |
返回一个受指定数组支持的固定大小的列表。 |
static int binarySearch(int[] a, int key) | 使用二分搜索法来搜索指定的 int 型数组,以获得指定的值。 |
static int binarySearch(int[] a, int fromIndex, int toIndex, int key) | 使用二分搜索法来搜索指定的 int 型数组的范围,以获得指定的值。 |
static int[] copyOf(int[] original, int newLength) | 复制指定的数组,截取或用 0 填充(如有必要),以使副本具有指定的长度。 |
static int[] copyOfRange(int[] original, int from, int to) | 将指定数组的指定范围复制到一个新数组。 |
static boolean equals(int[] a, int[] a2) | 如果两个指定的 int 型数组彼此相等,则返回 true。 |
static void fill(int[] a, int val) | 将指定的 int 值分配给指定 int 型数组的每个元素。 |
static void fill(int[] a, int fromIndex, int toIndex, int val) | 将指定的 int 值分配给指定 int 型数组指定范围中的每个元素。 |
static void sort(int[] a) | 对指定的 int 型数组按数字升序进行排序。 |
static void sort(int[] a, int fromIndex, int toIndex) | 对指定 int 型数组的指定范围按数字升序进行排序。 |
static String toString(int[] a) | 返回指定数组内容的字符串表示形式。 |
static boolean deepEquals(Object[] a1, Object[] a2) | 如果两个指定数组彼此是深层相等 的,则返回 true。 |
static int deepHashCode(Object[] a) | 基于指定数组的“深层内容”返回哈希码。 |
static String deepToString(Object[] a) | 返回指定数组“深层内容”的字符串表示形式。 |
static void sort(T[] a, Comparator<? super T> c) | 根据指定比较器产生的顺序对指定对象数组进行排序。 |
static void sort(T[] a, int fromIndex, int toIndex, Comparator<? super T> c) | 根据指定比较器产生的顺序对指定对象数组的指定范围进行排序。 |
以上方法以int类型为例,其他的基本数据类型也有相应的重载方法。
练习
常用的方法
package com;
import java.util.Arrays;
public class ArraysTest {
public static void main(String[] args) {
int[] nums = {1, 3, 5, 4, 2};
System.out.println("工具类输出" + Arrays.toString(nums));
Arrays.sort(nums);
System.out.println("排序后输出" + Arrays.toString(nums));
}
}
package com.practise;
import java.util.Arrays;
/**
* 请使用Arrays相关API,讲一个随机字符串的所有字符升序排序,
* 并倒序打印 (倒序 forr)
*/
public class ArraysPractise {
public static void main(String[] args) {
String str = "dqwtjzfdas4523aklo";
char[] chars = str.toCharArray();
Arrays.sort(chars);
for (int i = chars.length - 1; i >= 0; i--) {
System.out.print(chars[i] + "\t");
}
}
}
Math类
概述
java.lang.Math
类包含用于执行基本数学运算的方法,如初等指数、对数、平方根和三角函数。
字段摘要
字段摘要 | |
---|---|
static double E | 比任何其他值都更接近 e(即自然对数的底数)的 double 值 |
static double PI | 比任何其他值都更接近 pi(即圆的周长与直径之比)的 double 值。 |
静态方法
方法摘要 | 描述 |
---|---|
static int abs(int a) | 返回 int 值的绝对值。 (long/float/double) |
static int max(int a, int b) | 返回两个 int 值中较大的一个。(long/float/double) |
static int min(int a, int b) | 返回两个 int 值中较小的一个。(long/float/double) |
static double ceil(double a) | 返回一个大于等于参数的最小double 值,并等于某个整数。 向上取整! |
static double floor(double a) | 返回一个小于等于参数的最大double 值,并等于某个整数。向下取整! |
static int round(float a) | 返回最接近参数的 int 四舍五入!。 |
static long round(double a) | 返回最接近参数的 long。 |
static double random() | 返回带正号的 double 值,该值大于等于 0.0 且小于 1.0。 |
static double pow(double a, double b) | 返回第一个参数的第二个参数次幂的值。 |
static double sqrt(double a) | 返回正确舍入的 double 值的正平方根。 |
static double cbrt(double a) | 返回 double 值的立方根。 |
其他方法
方法摘要 | 描述 |
---|---|
static double copySign(double magnitude, double sign) | 返回带有第二个浮点参数符号的第一个浮点参数。 |
static float copySign(float magnitude, float sign) | 返回带有第二个浮点参数符号的第一个浮点参数。 |
static double cos(double a) | 返回角的三角余弦。 |
static double cosh(double x) | 返回 double 值的双曲线余弦。 |
static double exp(double a) | 返回欧拉数 e 的 double 次幂的值。 |
static double expm1(double x) | 返回 ex -1。 |
static int getExponent(double d) | 返回 double 表示形式中使用的无偏指数。 |
static int getExponent(float f) | 返回 float 表示形式中使用的无偏指数。 |
static double hypot(double x, double y) | 返回 sqrt(x2 +y2),没有中间溢出或下溢。 |
static double IEEEremainder(double f1, double f2) | 按照 IEEE 754 标准的规定,对两个参数进行余数运算。 |
static double log(double a) | 返回 double 值的自然对数(底数是 e)。 |
static double log10(double a) | 返回 double 值的底数为 10 的对数。 |
static double log1p(double x) | 返回参数与 1 之和的自然对数。 |
static double nextAfter(double start, double direction) | 返回第一个参数和第二个参数之间与第一个参数相邻的浮点数。 |
static float nextAfter(float start, double direction) | 返回第一个参数和第二个参数之间与第一个参数相邻的浮点数。 |
static double nextUp(double d) | 返回 d 和正无穷大之间与 d 相邻的浮点值。 |
static float nextUp(float f) | 返回 f 和正无穷大之间与 f 相邻的浮点值。 |
static double rint(double a) | 返回最接近参数并等于某一整数的 double 值。 |
static double scalb(double d, int scaleFactor) | 返回 d × 2scaleFactor,其舍入方式如同将一个正确舍入的浮点值乘以 double 值集合中的一个值。 |
static float scalb(float f, int scaleFactor) | 返回 f × 2scaleFactor,其舍入方式如同将一个正确舍入的浮点值乘以 float 值集合中的一个值。 |
static double signum(double d) | 返回参数的符号函数;如果参数为 0,则返回 0;如果参数大于 0,则返回 1.0;如果参数小于 0,则返回 -1.0。 |
static float signum(float f) | 返回参数的符号函数;如果参数为 0,则返回 0;如果参数大于 0,则返回 1.0;如果参数小于 0,则返回 -1.0。 |
static double sin(double a) | 返回角的三角正弦。 |
static double tan(double a) | 返回角的三角正切。 |
static double sinh(double x) | 返回 double 值的双曲线正弦。 |
static double tanh(double x) | 返回 double 值的双曲线余弦。 |
static double toDegrees(double angrad) | 将用弧度表示的角转换为近似相等的用角度表示的角。 |
static double toRadians(double angdeg) | 将用角度表示的角转换为近似相等的用弧度表示的角。 |
static double ulp(double d) | 返回参数的 ulp 大小。 |
static float ulp(float f) | 返回参数的 ulp 大小。 |
static double acos(double a) | 返回一个值的反余弦;返回的角度范围在 0.0 到 pi 之间。 |
static double asin(double a) | 返回一个值的反正弦;返回的角度范围在 -pi/2 到 pi/2 之间。 |
static double atan(double a) | 返回一个值的反正切;返回的角度范围在 -pi/2 到 pi/2 之间。 |
static double atan2(double y, double x) | 将矩形坐标 (x, y) 转换成极坐标 (r, theta),返回所得角 theta。 |
练习
package com;
import org.opencv.core.Mat;
/**
* Math 类常用的4+1
* abs ceil floor round
*/
public class MathTest {
public static void main(String[] args) {
// 绝对值 (int/long/float/double)
System.out.println(Math.abs(1.11));
System.out.println(Math.abs(-1.11));
System.out.println("===========");
// 向上取整 只能double
System.out.println(Math.ceil(1.0));
System.out.println(Math.ceil(1.4));
System.out.println(Math.ceil(1.6));
System.out.println(Math.ceil(2.0));
System.out.println("===========");
// 向下取整 只能double
System.out.println(Math.floor(1.0));
System.out.println(Math.floor(1.4));
System.out.println(Math.floor(1.6));
System.out.println(Math.floor(2.0));
System.out.println("===========");
// 四舍五入 float -> int , double -> long
System.out.println(Math.round(1.0));
System.out.println(Math.round(1.4));
System.out.println(Math.round(1.6));
System.out.println(Math.round(2.0));
System.out.println("===========");
// 字段
System.out.println(Math.PI);
System.out.println(Math.E);
}
}
结果
1.11
1.11
===========
1.0
2.0
2.0
2.0
===========
1.0
1.0
1.0
2.0
===========
1
1
2
2
===========
3.141592653589793
2.718281828459045
package com.practise;
import java.util.Arrays;
/**
* 计算再-10.8到5.9之间绝对值大于6或者小于2.1的整数有多少个?
*/
public class MathPractise {
public static void main(String[] args) {
double left = -10.8;
double right = 5.9;
int count = 0;
for (int i = (int)left; i <= (int)right; i++) {
int temp = Math.abs(i);
if (temp > 6 || temp < 2.1) {
count++;
}
}
System.out.println("符合的有"+count+"个");
}
}
Object类
概述
java.lang.Object
类是Java语言中的根类,即所有类的父类。它的所有方法子类都可以使用。
在对象实例化的时候,最终找的父类就是Object。
如果一个类没有特别指定父类, 那么默认则继承自Object类。例如:
public class MyClass /*extends Object*/ {
// ...
}
根据JDK源代码及Object类的API文档,Object类当中包含的方法有11个。今天我们主要学习其中的2个:
public String toString()
:返回该对象的字符串表示。public boolean equals(Object obj)
:指示其他某个对象是否与此对象“相等”。
toString方法
方法摘要
public String toString()
:返回该对象的字符串表示。
toString方法返回该对象的字符串表示,其实该字符串内容就是对象的类型+@+内存地址值。
public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
由于toString方法返回的结果是内存地址,而在开发中,经常需要按照对象的属性得到相应的字符串表现形式,因此也需要重写它。
重写toString方法
如果不希望使用toString方法的默认行为,则可以对它进行覆盖重写。例如自定义的Person类:
public class Person {
private String name;
private int age;
@Override
public String toString() {
return "Person{" + "name='" + name + '\'' + ", age=" + age + '}';
}
// 省略构造器与Getter Setter
}
在IntelliJ IDEA中,可以点击Code
菜单中的Generate...
,也可以使用快捷键alt+insert
,点击toString()
选项。
选择需要包含的成员变量并确定。
小贴士: 在我们直接使用输出语句输出对象名的时候,其实通过该对象调用了其toString()方法。
equals方法
方法摘要
public boolean equals(Object obj)
:指示其他某个对象是否与此对象“相等”。
调用成员方法equals并指定参数为另一个对象,则可以判断这两个对象是否是相同的。这里的“相同”有默认和自定义两种方式。
默认地址比较
如果没有覆盖重写equals方法,那么Object类中默认进行==
运算符的对象地址比较,只要不是同一个对象,结果必然为false。+
public boolean equals(Object obj) {
return (this == obj);
}
==
基本类型,两值相等返回true
引用类型,两地址相等返回true
重写equals方法
对象内容比较
如果希望进行对象的内容比较,即所有或指定的部分成员变量相同就判定两个对象相同,则可以覆盖重写equals方法。例如:
import java.util.Objects;
public class Person {
private String name;
private int age;
@Override
public boolean equals(Object o) {
// 如果对象地址一样,则认为相同
if (this == o)
return true;
// 如果参数为空,或者类型信息不一样,则认为不同
if (o == null || getClass() != o.getClass())
return false;
// 转换为当前类型
Person person = (Person) o;
// 要求基本类型相等,并且将引用类型交给java.util.Objects类的equals静态方法取用结果
return age == person.age && Objects.equals(name, person.name);
}
}
这段代码充分考虑了对象为空、类型一致等问题,但方法内容并不唯一。大多数IDE都可以自动生成equals方法的代码内容。
在IntelliJ IDEA中,可以使用Code
菜单中的Generate…
选项,也可以使用快捷键alt+insert
,
并选择equals() and hashCode()
进行自动代码生成。
tips:Object类当中的hashCode等其他方法,今后学习。
Objects类
在刚才IDEA自动重写equals代码中,使用到了java.util.Objects
类,那么这个类是什么呢?
在JDK7添加了一个Objects工具类,它提供了一些方法来操作对象,它由一些静态的实用方法组成,
这些方法是null-save(空指针安全的)或null-tolerant(容忍空指针的),
用于计算对象的hashcode、返回对象的字符串表示形式、比较两个对象。
在比较两个对象的时候,Object的equals方法容易抛出空指针异常,而Objects类中的equals方法就优化了这个问题。方法如下:
public static boolean equals(Object a, Object b)
:判断两个对象是否相等。
我们可以查看一下源码,学习一下:
public static boolean equals(Object a, Object b) {
return (a == b) || (a != null && a.equals(b));
}
常用API - Arrays、Math、Object的更多相关文章
- Java常用API(Arrays类)
Java常用API(Arrays类) 什么是Arrays类? java.util.Arrays 此类包含用来操作数组的各种方法,比如排序和搜索等.其所有方法均为静态方法,调用起来 非常简单. 这里我们 ...
- Java常用API及Math类
一.API的概述 API——Application Programing Interface:应用程序编程接口,是java提供的一些预定义的函数: 目的:基于API实现程序的快速编写,只需了解其作用, ...
- Java常用API、Math类介绍
一.API的概述 API——Application Programing Interface:应用程序编程接口,是java提供的一些预定义的函数: 目的:基于API实现程序的快速编写,只需了解其作用, ...
- Java常用API——Arrays工具类
介绍:Arrays工具类提供了一些可以直接操作数组的方法,以下是一些常用方法: int binarySearch(type[] a, type key):要求数组a元素升序排列,使用二分法搜索key的 ...
- 常用API【2】
常用API 1.Math类 1.1 Math类概述 Math包含执行基本数字运算的方法 没有构造方法,如何使用类中的成员呢? 看类的成员是否是静态的,如果是,可以通过类名直接调用 1.2Math类的常 ...
- 常用API(包装类、System、Math、Arrays、大数据运算)
常用API 今日内容介绍 u 基本类型包装类 u System u Math u Arrays u BigInteger u BigDecimal 第1章 基本类型包装类 大家回想下,在第二天我们学习 ...
- Object类、常用API
Object类.常用API Object类.常用API Object类.常用API Object类.常用API Object类.常用API Object类.常用API
- 常用API(Object、String、StringBuffer、用户登陆注册)
常用API 今日内容介绍 u Object u String u StringBuilder 第1章 Java的API及Object类 在以前的学习过程中,我们都在学习对象基本特征.对象的使用以及对象 ...
- java基础(15):常用API(Object、String、StringBuffer)
1. Java的API及Object类 在以前的学习过程中,我们都在学习对象基本特征.对象的使用以及对象的关系.接下来我们开始使用对象做事情,那么在使用对象做事情之前,我们要学习一些API中提供的常用 ...
随机推荐
- java实现杨辉三角系数
** 杨辉三角系数** (a+b)的n次幂的展开式中各项的系数很有规律,对于n=2,3,4时分别是:1 2 1, 1 3 3 1,1 4 6 4 1.这些系数构成了著名的杨辉三角形: 1 1 1 1 ...
- java调用linux下的so库
1.编写java类 public class Abc { static { System.loadLibrary("abc"); } public native static St ...
- 基于 abp vNext 和 .NET Core 开发博客项目 - 博客接口实战篇(四)
系列文章 基于 abp vNext 和 .NET Core 开发博客项目 - 使用 abp cli 搭建项目 基于 abp vNext 和 .NET Core 开发博客项目 - 给项目瘦身,让它跑起来 ...
- 案例:DG主库未设置force logging导致备库坏块
DG搭建时,官方文档手册有明确提到要设置数据库为force_logging,防止有nologging操作日志记录不全导致备库应用时出现问题. 虽然是老生常谈的安装规范,但现实中总会遇到不遵守规范的场景 ...
- 一文带你快速搞懂动态字符串SDS,面试不再懵逼
目录 redis源码分析系列文章 前言 API使用 embstr和raw的区别 SDSHdr的定义 SDS具体逻辑图 SDS的优势 更快速的获取字符串长度 数据安全,不会截断 SDS关键代码分析 获取 ...
- chrome浏览器版本与驱动不匹配问题的解决办法
1.浏览器与驱动如何匹配才不会报错 使用selenium模块的webdriver打开谷歌浏览器时常遇到这样的错误提示: selenium.common.exceptions.WebDriverExce ...
- Spring系列.依赖注入配置
依赖注入的配置 Spring的依赖注入分为基于构造函数的依赖注入和基于setter方法的依赖注入. 基于构造函数的依赖注入 <!-- 通过构造器参数索引方式依赖注入 --> <bea ...
- css固定宽高DIV内部元素垂直居中的方法
应用案例 案例是这样的,一个外层div,高宽是固定的,但是里面内容不是固定的.很多朋友的做法是头部加一个padding或者margin,这样,里面内容显得貌似是居中了,但是假如内容变化,这样头部的固定 ...
- mybatis的缓存2
原文:https://blog.csdn.net/qq_38274974/article/details/100898145 mybatis的缓存分为一级缓存.二级缓存那么,我们为什么要使用缓存呢? ...
- 如何获取Apollo上项目下的所有namespace?
背景 项目配置迁移到Apollo之后,通过统一的配置管理及配置监听使得项目配置修改的成本大大降低. 但是,在使用Apollo的过程中,强哥也遇到一个问题:如果我们要获取Apollo下的namespac ...