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的更多相关文章

  1. Java常用API(Arrays类)

    Java常用API(Arrays类) 什么是Arrays类? java.util.Arrays 此类包含用来操作数组的各种方法,比如排序和搜索等.其所有方法均为静态方法,调用起来 非常简单. 这里我们 ...

  2. Java常用API及Math类

    一.API的概述 API——Application Programing Interface:应用程序编程接口,是java提供的一些预定义的函数: 目的:基于API实现程序的快速编写,只需了解其作用, ...

  3. Java常用API、Math类介绍

    一.API的概述 API——Application Programing Interface:应用程序编程接口,是java提供的一些预定义的函数: 目的:基于API实现程序的快速编写,只需了解其作用, ...

  4. Java常用API——Arrays工具类

    介绍:Arrays工具类提供了一些可以直接操作数组的方法,以下是一些常用方法: int binarySearch(type[] a, type key):要求数组a元素升序排列,使用二分法搜索key的 ...

  5. 常用API【2】

    常用API 1.Math类 1.1 Math类概述 Math包含执行基本数字运算的方法 没有构造方法,如何使用类中的成员呢? 看类的成员是否是静态的,如果是,可以通过类名直接调用 1.2Math类的常 ...

  6. 常用API(包装类、System、Math、Arrays、大数据运算)

    常用API 今日内容介绍 u 基本类型包装类 u System u Math u Arrays u BigInteger u BigDecimal 第1章 基本类型包装类 大家回想下,在第二天我们学习 ...

  7. Object类、常用API

    Object类.常用API Object类.常用API Object类.常用API Object类.常用API Object类.常用API Object类.常用API

  8. 常用API(Object、String、StringBuffer、用户登陆注册)

    常用API 今日内容介绍 u Object u String u StringBuilder 第1章 Java的API及Object类 在以前的学习过程中,我们都在学习对象基本特征.对象的使用以及对象 ...

  9. java基础(15):常用API(Object、String、StringBuffer)

    1. Java的API及Object类 在以前的学习过程中,我们都在学习对象基本特征.对象的使用以及对象的关系.接下来我们开始使用对象做事情,那么在使用对象做事情之前,我们要学习一些API中提供的常用 ...

随机推荐

  1. java实现杨辉三角系数

    ** 杨辉三角系数** (a+b)的n次幂的展开式中各项的系数很有规律,对于n=2,3,4时分别是:1 2 1, 1 3 3 1,1 4 6 4 1.这些系数构成了著名的杨辉三角形: 1 1 1 1 ...

  2. java调用linux下的so库

    1.编写java类 public class Abc { static { System.loadLibrary("abc"); } public native static St ...

  3. 基于 abp vNext 和 .NET Core 开发博客项目 - 博客接口实战篇(四)

    系列文章 基于 abp vNext 和 .NET Core 开发博客项目 - 使用 abp cli 搭建项目 基于 abp vNext 和 .NET Core 开发博客项目 - 给项目瘦身,让它跑起来 ...

  4. 案例:DG主库未设置force logging导致备库坏块

    DG搭建时,官方文档手册有明确提到要设置数据库为force_logging,防止有nologging操作日志记录不全导致备库应用时出现问题. 虽然是老生常谈的安装规范,但现实中总会遇到不遵守规范的场景 ...

  5. 一文带你快速搞懂动态字符串SDS,面试不再懵逼

    目录 redis源码分析系列文章 前言 API使用 embstr和raw的区别 SDSHdr的定义 SDS具体逻辑图 SDS的优势 更快速的获取字符串长度 数据安全,不会截断 SDS关键代码分析 获取 ...

  6. chrome浏览器版本与驱动不匹配问题的解决办法

    1.浏览器与驱动如何匹配才不会报错 使用selenium模块的webdriver打开谷歌浏览器时常遇到这样的错误提示: selenium.common.exceptions.WebDriverExce ...

  7. Spring系列.依赖注入配置

    依赖注入的配置 Spring的依赖注入分为基于构造函数的依赖注入和基于setter方法的依赖注入. 基于构造函数的依赖注入 <!-- 通过构造器参数索引方式依赖注入 --> <bea ...

  8. css固定宽高DIV内部元素垂直居中的方法

    应用案例 案例是这样的,一个外层div,高宽是固定的,但是里面内容不是固定的.很多朋友的做法是头部加一个padding或者margin,这样,里面内容显得貌似是居中了,但是假如内容变化,这样头部的固定 ...

  9. mybatis的缓存2

    原文:https://blog.csdn.net/qq_38274974/article/details/100898145 mybatis的缓存分为一级缓存.二级缓存那么,我们为什么要使用缓存呢?  ...

  10. 如何获取Apollo上项目下的所有namespace?

    背景 项目配置迁移到Apollo之后,通过统一的配置管理及配置监听使得项目配置修改的成本大大降低. 但是,在使用Apollo的过程中,强哥也遇到一个问题:如果我们要获取Apollo下的namespac ...