常用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实现第五届蓝桥杯武功秘籍
武功秘籍 小明到X山洞探险,捡到一本有破损的武功秘籍(2000多页!当然是伪造的).他注意到:书的第10页和第11页在同一张纸上,但第11页和第12页不在同一张纸上. 小明只想练习该书的第81页到第9 ...
- Windows10开启Ubuntu子系统并搭建Docker环境
前言 很早就听说微软有个基于Ubuntu的子系统,一直也没机会尝试一下,之前也只是用VMware安装,但是还要单独安装软件,安装镜像,一点都不fit,所以就瞎折腾下(也是因为最近有空). 搭建Ubun ...
- 从零搭建Window前端开发环境
前言 作为一个小前端,是否因为搭建环境烦恼过,是否因为npm等国外镜像踩坑过,不要怕,接下来跟着我一步步搭建适合自己的开发环境吧!!! node 这个不用说了吧,我们经常和他打交道,无论是 gulp. ...
- 【JAVA习题二十八】海滩上有一堆桃子,五只猴子来分。第一只猴子把这堆桃子凭据分为五份,多了一个,这只猴子把多的一个扔入海中,拿走了一份。第二只猴子把剩下的桃子又平均分成五份,又多了一个,它同样把多的一个扔入海中,拿走了一份,第三、第四、第五只猴子都是这样做的,问海滩上原来最少有多少个桃子?
package erase; import java.util.Scanner; public class 猴子分桃 { public static void main(String[] args) ...
- 5、react-路由
1.单页面:(只有一个index.html)(为什么要使用react-router再react中) 所有的组件都是再同一个index.html中进行显示的,它再显示的时候是怎么显示的,通过你点击的连接 ...
- hadoop知识整理(5)之kafka
一.简介 来自官网介绍: 翻译:kafka,是一个分布式的流处理平台.LinkedIn公司开发.scala语言编写. 1.支持流处理的发布订阅模式,类似一个消息队列系统: 2.多备份存储,副本冗余 ...
- 小师妹学JavaIO之:MappedByteBuffer多大的文件我都装得下
目录 简介 虚拟地址空间 详解MappedByteBuffer MapMode MappedByteBuffer的最大值 MappedByteBuffer的使用 MappedByteBuffer要注意 ...
- Jmeter环境部署
一.安装jdk 下载jdk 双击jdk-8u211-windows-x64.exe,默认下一步安装 我的电脑-属性-高级系统设置-环境变量 在“系统变量”出,新建”JAVA_HOME”,配置jdk的安 ...
- EIGRP-13-弥散更新算法-停滞在活动状态
如果一台路由器参与到了针对某个目的地的弥散计算中(即将相应路由置为活动状态,并发送查询包),它必须首先等待所有邻居都返回响应包,之后它才能执行自已的弥散计算,接着选出新的最优路径,最后开始发送自已的响 ...
- Oracle调用Java方法(上)如何使用LoadJava命令和如何将简单的Jar包封装成Oracle方法
最近在工作中遇到了遇到了一个需求需要将TIPTOP中的数据导出成XML并上传到FTP主机中,但是4GL这方面的文档比较少最终决定使用Oracle调用Java的方法,在使用的过程中发现有很多的坑,大部分 ...