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实现第五届蓝桥杯武功秘籍

    武功秘籍 小明到X山洞探险,捡到一本有破损的武功秘籍(2000多页!当然是伪造的).他注意到:书的第10页和第11页在同一张纸上,但第11页和第12页不在同一张纸上. 小明只想练习该书的第81页到第9 ...

  2. Windows10开启Ubuntu子系统并搭建Docker环境

    前言 很早就听说微软有个基于Ubuntu的子系统,一直也没机会尝试一下,之前也只是用VMware安装,但是还要单独安装软件,安装镜像,一点都不fit,所以就瞎折腾下(也是因为最近有空). 搭建Ubun ...

  3. 从零搭建Window前端开发环境

    前言 作为一个小前端,是否因为搭建环境烦恼过,是否因为npm等国外镜像踩坑过,不要怕,接下来跟着我一步步搭建适合自己的开发环境吧!!! node 这个不用说了吧,我们经常和他打交道,无论是 gulp. ...

  4. 【JAVA习题二十八】海滩上有一堆桃子,五只猴子来分。第一只猴子把这堆桃子凭据分为五份,多了一个,这只猴子把多的一个扔入海中,拿走了一份。第二只猴子把剩下的桃子又平均分成五份,又多了一个,它同样把多的一个扔入海中,拿走了一份,第三、第四、第五只猴子都是这样做的,问海滩上原来最少有多少个桃子?

    package erase; import java.util.Scanner; public class 猴子分桃 { public static void main(String[] args) ...

  5. 5、react-路由

    1.单页面:(只有一个index.html)(为什么要使用react-router再react中) 所有的组件都是再同一个index.html中进行显示的,它再显示的时候是怎么显示的,通过你点击的连接 ...

  6. hadoop知识整理(5)之kafka

    一.简介 来自官网介绍: 翻译:kafka,是一个分布式的流处理平台.LinkedIn公司开发.scala语言编写.   1.支持流处理的发布订阅模式,类似一个消息队列系统: 2.多备份存储,副本冗余 ...

  7. 小师妹学JavaIO之:MappedByteBuffer多大的文件我都装得下

    目录 简介 虚拟地址空间 详解MappedByteBuffer MapMode MappedByteBuffer的最大值 MappedByteBuffer的使用 MappedByteBuffer要注意 ...

  8. Jmeter环境部署

    一.安装jdk 下载jdk 双击jdk-8u211-windows-x64.exe,默认下一步安装 我的电脑-属性-高级系统设置-环境变量 在“系统变量”出,新建”JAVA_HOME”,配置jdk的安 ...

  9. EIGRP-13-弥散更新算法-停滞在活动状态

    如果一台路由器参与到了针对某个目的地的弥散计算中(即将相应路由置为活动状态,并发送查询包),它必须首先等待所有邻居都返回响应包,之后它才能执行自已的弥散计算,接着选出新的最优路径,最后开始发送自已的响 ...

  10. Oracle调用Java方法(上)如何使用LoadJava命令和如何将简单的Jar包封装成Oracle方法

    最近在工作中遇到了遇到了一个需求需要将TIPTOP中的数据导出成XML并上传到FTP主机中,但是4GL这方面的文档比较少最终决定使用Oracle调用Java的方法,在使用的过程中发现有很多的坑,大部分 ...