Java 常用类库的整理 常用类库方法的整理+理解

1、Objects类:

​ 包含了static实用程序方法,这些实用程序包括了null或null方法。用于计算对象的哈希代码,返回对象的字符串,比较两个对象以及检查索引或子范围值是否超出范围。

​ 方法摘要:

​ 难点:变量和类型为:static int

方法:compare(T a, T b, Comparator<? super T> c)

描述:如果参数相同,则则返回0,否则返回c.compare(a,b)。

​ 检查范围的简单来说就是判断是否下标越界三个方法:变量和类型都是stati int

​ 1、checkFromIndexSize(int fromIndex, int size, int length) 描述 :检查是否在子范围从第一个参数(包括)到(第一个参数+size(第二个参数))(不包括)

​ 2、checkFromToIndex(int fromIndex, int toIndex, int length) 描述:检查是否在子范围从第一个参数(包括)到(第二个参数)(不包括)

​ 3、checkIndex(int index, int length) 描述:检查第一个参数是否在0(包括)-length(不包括)范围内。

​ equals(Object a, Object b) 和 deepEquals(Object a, Object b)的区别: (变量和类型:static boolean)

​ 当我们比较两个内容相等的时候适用deepEquals。(若为对象数组且未重写equals方法,不建议使用。)equals的相等需要两个内容的物理地址相等才相等。如果对象重写了equals不在此情况内。

​ isNull(Object obj) 和 nonNull(Object obj) (变量和类型:static boolean)区别:

​ isNull 如果为null 则true nonNull恰好相反

​ 检查指定对象是否为空的四种方法:(变量和类型均为泛型 static T)

​ requireNonNull(T obj) 检查obj是否不是null,不是null则返回true。从方法名可以看出来意思。

​ requireNonNull(T obj, String message)

​ requireNonNull(T obj, Supplier messageSupplier) 第二个和第三个方法作用相同。检查obj是否不是null,是null则抛出空指针异常。

​ requireNonNullElse(T obj, T defaultObj) 如果不是null则返回第一个参数,是null则返回非null的第二个参数

​ requireNonNullElseGet(T obj, Supplier<? extends T> supplier) 如果不是null则返回第一个参数,是null则返回非null值supplier.get()。

​ hash(Object… values) 变量和类型:static int;为一系列输入值生成哈希码。

​ hashCode(Object o) 变量和类型:static int;返回非的哈希码 null参数,0为 null的论点。

​ toString(Object o) 与 toString(Object o,String nullDefault)区别:(变量和类型都是static String)

​ 如果o不会空则调用toString,第二个方法如果为空则调用第二个参数即可。

2、Math类 (常用的总结)

​ 当我们需要进行算术运算时,首先想到的是使用Math类的工具。如果Math类没有我们需要的方法,我们再进行自定义方法。

​ ① 方法 类型名 abs(类型名 a) 都是返回 a 相应类型的绝对值。

​ ② 方法 int/long addExact(int/long a,int/long b) 返回a 与 b的和相应返回类型

​ eg:使用int类型:

public class MathTest {
    public static void main(String[] args) {
        int a = -3;
        int b = 5;
        int c = Math.addExact(a,b);
        System.out.println(c);
    }
}

运行结果:2

​ 方法 int/long decrementExact(int/long a) 返回参数递减1,如果结果溢出 int则抛出异常。 简单来说就是实现递减1。

​ 方法 incrementExact(int/long a) 返回参数递加1,如果结果溢出 int则抛出异常。

​ ③ 三角函数有关的方法,具体查询API 。具有返回值:acos、asin、atan、atan2、cos、cosh、sin、sinh、tan、tanh

​ ④ 方法 double ceil(double a),返回一个大于或者等于a的数学整数最小值。

​ 方法 double floor (double a),返回一个小于或者等于a的数学整数最大值。

​ eg:

public class MathTest {
    public static void main(String[] args) {
        double a = 5.93d;
        double b = -5.93d;
        double c = Math.ceil(a);
        System.out.println(c);
        c = Math.ceil(b);
        System.out.println(c);
    }
}

运行结果:6.0
-5.0

​ ⑤ double/float copySign(double/float magnitude, double/float sign) 返回带有第二个浮点参数符号的第一个浮点参数

​ eg:

public static void main(String[] args) {
    double a = -5.9321;
    double b = 5.2182;
    double c = Math.copySign(a,b);
    System.out.println(c);
}

运行结果:5.9321

​ ⑥ 关于数学e值的方法:double exp(double a) 返回Euler的数字 e ,其值 double值。
double expm1(double x) 返回返回 e x(e的x次方) -1。

​ double log(double a) 返回 double值的自然对数(基数 e )。double log10(double a) 返回 double值的基数10对数。double log1p(double x) 返回参数和的总和的自然对数。

​ ⑦ 方法 max、min。两个参数。两个参数类型相同,返回两个参数的最大或最小值。

​ ⑧ 方法 类型名 multiplyExact(类型名 x, 类型名 y) 。int、long型。返回两个参数的乘积的值

​ ⑨ 方法 类型名 negateExact(类型名 x) 。int/long型。返回x的相反数。简单来说就是取反

​ ⑩ 方法 double random()。产生一个0(包括)-1(不包括)之间的随机数

​ ①① 方法 double rint(double a) 返回与 double值最接近的 double值,该值等于数学整数。 当a为8.5或者-8.5时,返回的值为8.0 。其实除开这个相当于四舍五入。

​ ①② 方法 long round(double a) 返回与参数最接近的 long ,并将关系四舍五入为正无穷大。 int round(float a) 返回与参数最接近的 int ,并将关系四舍五入为正无穷大。 注意:两个函数的返回值是long、int。

​ ①③ 方法 double sqrt(double a) 返回 double值的正平方根。

​ ①④ 方法 int/long subtractExact(int/long a,int/long b) 返回相对应的值 ,简单来说就是求a-b。

3、Arrays类(常用的方法)

① binarySearch(类型名[] arr,类型名 a) 二分查找,查找a在数组arr的位置下标。返回的是一个int型数组下标。当a查询不到时,返回一个小于0的值。

​ eg:

public static void main(String[] args) {
    int[] arr = {1,4,7,32,67,100};
    int index = Arrays.binarySearch(arr,7);
    System.out.println(index);
}

运行结果:2

② 方法copyOf

​ 重新创建一个数组,将原数组复制到新数组并且做到了扩容。

public static void main(String[] args) {
    int[] arr1 = {1,4,7,32,67,100};
    int[] arr;
    arr = Arrays.copyOf(arr1,10);
    System.out.println(Arrays.toString(arr));
}

结果:[1, 4, 7, 32, 67, 100, 0, 0, 0, 0]

③ 方法copyOfRange

将指定数组的范围复制到新数组中,下面举一个例子

public static void main(String[] args) {
    int[] arr1 = {1,4,7,32,67,100};
    int[] arr2 = {2,32,4};
    int[] arr;
    arr2 = Arrays.copyOfRange(arr1,2,6);
    System.out.println(Arrays.toString(arr2));
}

运行结果:[7, 32, 67, 100]	//很明显原来的arr2数组的值被覆盖了

④ 关于String deepToString(Object[] obj)方法的使用:在这个地方我有一个疑惑,就是为什么arr2数组不能使用int类型声明,是因为返回值String限制了吗

public static void main(String[] args) {
    //int[] arr1 = {1,4,7,32,67,100};
    Object[] arr2 = {"2","32","4"};
    //int[] arr;
    //arr2 = Arrays.copyOfRange(arr1,2,6);
    System.out.println(Arrays.deepToString(arr2));
}

运行结果:[2, 32, 4]

⑤ equals方法 例子如下:类型名可以改变,返回值是boolean类型。true or false

public static void main(String[] args) {
    int[] arr1 = {2,2,4};
    int[] arr2 = {2,2,4};
    //int[] arr;
    //arr2 = Arrays.copyOfRange(arr1,2,6);
    System.out.println(Arrays.equals(arr1,arr2));
}

运行结果:true

⑥ fill方法 例如 void fill(int[] arr,int value) 的含义就是将value的值赋给arr数组的每一个元素

第一种形式:

public static void main(String[] args) {
    int[] arr = new int[3];
    Arrays.fill(arr,3);
    System.out.println(Arrays.toString(arr));
}

运行结果:[3, 3, 3]

第二种形式:

public static void main(String[] args) {
    int[] arr = new int[6];
    Arrays.fill(arr,2,5,3);		//索引2到5赋值3.包括2不包括5
    System.out.println(Arrays.toString(arr));
}

运行结果为:[0, 0, 3, 3, 3, 0]

⑦ hashcode方法 返回类型为int,一个参数例如参数int[] a。

⑧ mismatch方法,返回类型为int,两个数组参数,简单来说是查找两个数组的第一个不匹配的相对索引,如果未找到则返回-1. 有两种方式,同⑥类似。

⑨ sort方法,无返回值,升序。例子 两种形式:Ⅰ:void sort(int[] a); Ⅱ:void sort(int[] a,int fromIndex,int toIndex)

⑩ String toString(int[] a) 返回指定数组内容的字符串表示形式。

4、BigDecimal类(常用的方法)

​ BigDecimal有自身的构造器,具体构造方法参见API

① abs方法 BigDecimal abs(); 一般适用于整数的取绝对值

public static void main(String[] args) {
    BigDecimal B1 = new BigDecimal(-2);
    System.out.println(B1.abs());
}

结果:2

② add方法 常用下面的这种形式: (常用于两个整数的求值,当b1,b2不为整数的时候,求和精度有误,当求和加起来为整数时,精度无误。)

public static void main(String[] args) {
    BigDecimal b1 = new BigDecimal(-2);
    BigDecimal b2 = new BigDecimal(6);
    System.out.println(b1.add(b2));
}

结果:4

③ divide方法 求商 返回值为BigDecimal。注意:如果无法表示准确的商(因为它具有非终止的十进制扩展),则抛出ArithmeticException 。

public static void main(String[] args) {
    BigDecimal b1 = new BigDecimal(8);
    BigDecimal b2 = new BigDecimal(4);
    System.out.println(b1.divide(b2));
}

结果:2

④ 除了equals方法其他方法均无参数,返回值即是转换的值。只有int 和 long 转换存在丢失数据信息的可能,则有一个检查的方法在转换原基础上增加了Exact。

double doubleValue() 将 BigDecimal转换为 double 。
boolean equals(Object x) 将此 BigDecimal与指定的 Object进行相等性比较。
float floatValue() 将 BigDecimal转换为 float 。
int hashCode() 返回此 BigDecimal的哈希码。
int intValue() 将 BigDecimal成 int 。
int intValueExact() 将 BigDecimal转换为 int ,检查是否丢失了信息。
long longValue() 将 BigDecimal转换为 long 。
long longValueExact() 将此 BigDecimal转换为 long ,检查是否丢失了信息。

⑤ max,min有一个BigDecimal类型参数,返回值类型BigDecimal。返回最大或最小值。

⑥ valueOf方法,将double或者long转换为BigDecimal类型。

注意:当我们使用构造方法传入的是字符串数字的时候,小数丢失精度问题则没有了

5、Date类,我们只需要关注 Date类表示特定的时刻,精度为毫秒即可。

​ 关注它的构造函数(常用):Date();

① boolean after(Date when) 测试此日期是否在指定日期之后。
boolean before(Date when) 测试此日期是否在指定日期之前。
boolean equals(Object obj) 比较两个相等的日期。

int compareTo(Date anotherDate) 比较两个日期的前后,如果调用的对象在参数对象时间为前则返回小于0的值,两个日期相同则返回0,在后就返回大于0的值。示例如下:

public static void main(String[] args) {
        Date date1 = new Date();
        Date date2 = new Date(218937243);
        System.out.println(date1);
        System.out.println(date2);
        System.out.println(date2.compareTo(date1));
    }
    
结果:Thu Jul 15 14:02:06 GMT+08:00 2021
	Sat Jan 03 20:48:57 GMT+08:00 1970
	-1

② long getTime() 和 void setTime(long time) 两个方法。

eg

public static void main(String[] args) {
    Date date1 = new Date();
    Date date2 = new Date();
    long l = 21281473;
    date2.setTime(l);
    System.out.println(date1);
    System.out.println(date2);
    System.out.println(date1.getTime());
}

结果:Thu Jul 15 14:10:59 GMT+08:00 2021
	Thu Jan 01 13:54:41 GMT+08:00 1970
	1626329459358

③ toString方法

public static void main(String[] args) {
    Date date1 = new Date();
    System.out.println(date1);
    System.out.println(date1.getTime());
    System.out.println(date1.toString());
}

结果:Thu Jul 15 14:09:47 GMT+08:00 2021
	1626329387074
	Thu Jul 15 14:09:47 GMT+08:00 2021

可以发现toString返回的和直接返回对象的格式是一样的。

在Date类,咱们只需要知道这个就可以了。其他的方法已过时。

6、DateFormat类(常用的方法)

该类是一个抽象类,进入它的直接子类SimpleDateFormat

SimpleDateFormat 拥有自己的构造方法

  • Date and Time PatternResult
    "yyyy.MM.dd G 'at' HH:mm:ss z"2001.07.04 AD at 12:08:56 PDT
    "EEE, MMM d, ''yy"Wed, Jul 4, '01
    "h:mm a"12:08 PM
    "hh 'o''clock' a, zzzz"12 o'clock PM, Pacific Daylight Time
    "K:mm a, z"0:08 PM, PDT
    "yyyyy.MMMMM.dd GGG hh:mm aaa"02001.July.04 AD 12:08 PM
    "EEE, d MMM yyyy HH:mm:ss Z"Wed, 4 Jul 2001 12:08:56 -0700
    "yyMMddHHmmssZ"010704120856-0700
    "yyyy-MM-dd'T'HH:mm:ss.SSSZ"2001-07-04T12:08:56.235-0700
    "yyyy-MM-dd'T'HH:mm:ss.SSSXXX"2001-07-04T12:08:56.235-07:00
    "YYYY-'W'ww-u"2001-W27-3

上面表格,转自Java API。

eg:

public static void main(String[] args) {
    SimpleDateFormat date1 = new SimpleDateFormat("yyyy年MM月dd日 HH:mm ss");
    String text = date1.format(new Date());//创建一个匿名对象
    System.out.println(text);
}

结果:2021年07月15日 14:44 33

7、Calendar类

部分方法如下

public static void main(String[] args) {
        Calendar c1 = Calendar.getInstance();
        int year = c1.get(Calendar.YEAR);
        int day = c1.get(Calendar.DAY_OF_WEEK); //由于是从周日算为第一天
        Date date = c1.getTime();
        System.out.println(date);
        System.out.println(year);
        c1.add(Calendar.YEAR,6);    //月份,周,天数,类推
        System.out.println(c1.get(Calendar.YEAR));
        System.out.println(day);
    }
    
结果:Thu Jul 15 15:27:41 GMT+08:00 2021
	2021
	2027
	5

其他方法:

public static void main(String[] args) {
    Calendar c1 = Calendar.getInstance();
    //获取日历时间,表示的Date对象 getTime()方法
    Date date = c1.getTime();
    System.out.println(date);
    //查看一个月或者一年最大的天数方法如下
    int month = c1.getActualMaximum(Calendar.MONTH);
    int dayOfYear = c1.getActualMaximum(Calendar.DAY_OF_YEAR);
    System.out.println(month);
    System.out.println(dayOfYear);
    //set方法
    c1.set(Calendar.MONTH,1);   //1代表2月   0-11代表1-12月
    System.out.println(c1.getActualMaximum(Calendar.DAY_OF_MONTH));
}

结果:Thu Jul 15 15:25:47 GMT+08:00 2021
	11
	365
	28
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

kepnosian

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值