1、Math类
Math类常用方法:
-
abs():求绝对值
-
pow():求幂
-
ceil():向上取整,返回 >= 该参数的最小整数(最后会转成double)
-
floor():向下取整,返回 <= 该参数的最大整数(最后会转成double)
-
round():四舍五入
-
sqrt():求开方
-
random():返回的是0-1之间的一个随机小数(0 <= x < 1)
//练习:获取一个a-b之间的一个随机整数 int num = (int)(a + Math.random()*(b-a+1))
-
min():返回最小值
-
max():返回最大值
2、Arrays类
常用方法的应用:
-
toString:返回数组的字符串形式
Arrays.toString(arr); int[] arr = {2,3,5,6}; String s = Arrays.toString(arr); System.out.println(s); //输出:[2,3,5,6]
-
sort:排序【自然排序和定制排序】
Integer[] arr = {2,-1,7,6}; //String s = Arrays.toString(arr); // //System.out.println(s); //sort方法的使用 //1.因为数组是引用数据类型,所以通过sort排序后,会直接影响到实参 Arrays.sort(arr); System.out.println(Arrays.toString(arr));
-
sort( T[ ] a, Comparator<? super T> c):自定义排序规则
//通过传入一个接口Comparator实现,定制排序 Integer[] arr2 = {2,-1,7,6}; //1.进入sort方法 //2.进入到TimeSort.sort方法 //3.进入binarySort(T[] a, int lo, int hi, int start,Comparator<? super T> c) //4.执行到binarySort方法的代码,会格局动态绑定机制c.compare()执行我们传入的匿名内部类的compare() /* while (left < right) { int mid = (left + right) >>> 1; if (c.compare(pivot, a[mid]) < 0) right = mid; else left = mid + 1; } */ Arrays.sort(arr2, new Comparator<Integer>() { @Override public int compare(Integer o1, Integer o2) { return o2 - o1; } });
-
binarySearch:二分查找方法,要求必须排好序
Integer[] arr = {1,4,67,88,90}; //1.binarySearch 通过二分查找法进行查找,要求必须排好序 //2.如果数组不存在该元素,就返回 return -(low + 1); // key not found. //low代表应该存在的位置 int index = Arrays.binarySearch(arr, 89); System.out.println("index:" + index);
-
copyOf:数组元素的复制
Integer[] arr = {1,4,67,88,90}; //copyOf 数组元素的复制 //1.从arr数组中拷贝?个元素到新数组中 //2.如果拷贝长度 > arr.length 就在新数组的后面 增加 null //3.如果拷贝长度 < 0 就会发生异常NegativeArraySizeException //4.该方法的底层使用的是 System.arraycopy(); Integer[] newArr = Arrays.copyOf(arr, arr.length+2); System.out.println(Arrays.toString(newArr));//[1, 4, 67, 88, 90, null, null]
-
fill:数组元素填充
//fill 数组元素填充 Integer[] num = new Integer[]{9,3,2}; //使用 99 去填充 num数组, 可以理解为替换原来所有的元素 Arrays.fill(num,99); System.out.println(Arrays.toString(num));//[99, 99, 99]
-
equals:比较两个数组元素是否一致
boolean equals = Arrays.equals(arr1, arr2);
-
asList:将一组值转换成List集合
//asList List<Integer> list = Arrays.asList(1, 2, 3, 4); //1.编译类型:List //2.运行类型:为Array中的静态内部类 // private static class ArrayList<E> extends AbstractList<E> // implements RandomAccess, java.io.Serializable System.out.println("list:" + list);//list:[1, 2, 3, 4] System.out.println("list的运行类型:" + list.getClass());//list的运行类型:class java.util.Arrays$ArrayList
Arrays.asList方法源码:
Arrays的内部类: 包含了ArrayList类
12、System类
常用方法:
-
exit:退出当前程序
-
arraycopy:复制数组元素,比较适合底层调用,一般使用Arrays.copyOf完成复制数组
int[] src = {1,2,3}; int[] dest = new int[3]; System.arraycopy(src, 0, dest, 0, 3);
-
currentTimeMillens:返回当前时间距离1970-1-1的毫秒数
-
gc:运行垃圾回收机制System.gc();
13、BigInteger和BigDecimal类
编程中,需要处理很大的整数时,long不够用
可以使用BigInteger的类来搞定
注意:
在对BigInteger进行加减乘除的时候,需要使用对应的方法,不能直接进行 + - *。要使用对应的方法
//编程中,需要处理很大的整数时,long不够用
//可以使用BigInteger的类来搞定
BigInteger bigInteger = new BigInteger("2344444444444444444");
System.out.println(bigInteger);
//1.在对BigInteger进行加减乘除的时候,需要使用对应的方法,不能直接进行 + - * /
//加法
BigInteger bigInteger1 = new BigInteger("100");
BigInteger add = bigInteger.add(bigInteger1);
System.out.println(add);//2344444444444444544
//减法
BigInteger subtract = bigInteger.subtract(bigInteger1);
System.out.println(subtract);//2344444444444444344
//乘法
BigInteger multiply = bigInteger.multiply(bigInteger1);
System.out.println(multiply);//234444444444444444400
//除法
BigInteger divide = bigInteger.divide(bigInteger1);
System.out.println(divide);//23444444444444444
当我们需要保存一个精度很高的数时,double不够用
可以使用 BigDecimal类
注意:
也不能直接加减乘除,要调用相应方法
除法 除不尽时,会抛出异常,若想避免可在方法中指定精度
BigDecimal bigDecimal = new BigDecimal("199.111111111111199999999999");
BigDecimal bigDecimal1 = new BigDecimal("1.1");
//加法
System.out.println(bigDecimal.add(bigDecimal1));
//减法
System.out.println(bigDecimal.subtract(bigDecimal1));
//乘法
System.out.println(bigDecimal.multiply(bigDecimal1));
//除法 除不尽时会抛出异常ArithmeticException
//解决办法:在调用divide方法时,指定精度即可
//System.out.println(bigDecimal.divide(bigDecimal1));
System.out.println(bigDecimal.divide(bigDecimal1,BigDecimal.ROUND_CEILING));
14、日期类
1、Date
第一代日期类
java.util.Date
//获取当前系统时间
Date d1 = new Date();
System.out.println(d1);//Fri Jun 03 22:25:13 CST 2022
2、SimpleDateFomat
格式化日期
//格式化日期
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy年MM月dd日 hh:mm:ss E");
String format = dateFormat.format(d1);
System.out.println(format);//2022年06月03日 10:31:21 星期五
3、Calendar
第二代日期类
java.util.Calendar
//1. Calendar是一个抽象类,并且构造器是private
//2.可以通过getInstance()来获取实例
//3.提供大量的方法和字段提供给程序员
//4.Calendar 没有专门的格式化方法,所有需要自己来组合显示
Calendar c = Calendar.getInstance();
System.out.println(c);
//输出的是所有字段
//java.util.GregorianCalendar[time=1654267403072,areFieldsSet=true,areAllFieldsSet=true,lenient=true,
//zone=sun.util.calendar.ZoneInfo[id="Asia/Shanghai",offset=28800000,dstSavings=0,useDaylight=false,
//transitions=29,lastRule=null],firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,YEAR=2022,MONTH=5,WEEK_OF_YEAR=23,
//WEEK_OF_MONTH=1,DAY_OF_MONTH=3,DAY_OF_YEAR=154,DAY_OF_WEEK=6,DAY_OF_WEEK_IN_MONTH=1,AM_PM=1,HOUR=10,HOUR_OF_DAY=22,
//MINUTE=43,SECOND=23,MILLISECOND=72,ZONE_OFFSET=28800000,DST_OFFSET=0]
//获取日历对象的某个日历字段
System.out.println("年:" +c.get(Calendar. YEAR));
System.out.println("月:" + (c.get(Calendar.MONTH) + 1));
System.out.println("日:" +c.get(Calendar.DAY_OF_MONTH));
System.out.println("小时:" + c.get(Calendar . HOUR));
System.out.println("分钟:" + c.get(Calendar . MINUTE));
System.out.println("秒:" + c.get(Calendar.SECOND));
//Calendar 没有专门的格式化方法,所有需要自己来组合显示
System.out.println(c.get(Calendar. YEAR)+"年"+(c.get(Calendar.MONTH) + 1)+"月"+c.get(Calendar.DAY_OF_MONTH)+"日");
//2022年6月3日
4、LocalDate、LocalTime、LocalDateTime
前面两代日期类的不足分析:
JDK1.0中包含了一个java.util.Date类,但是它的大多数方法已经在JDK 1.1引入Calendar类之后被弃用了。
而Calendar也存在问题是:
- 可变性:像日期和时间这样的类应该是不可变的
- 偏移性:Date中的年份是从1900年开始的,而月份都是从0开始。
- 格式化:格式化只对Date有用,Calendar则不行。
- 此外,他们也都不是线程安全的;不能处理闰秒等(每个2天,多出1s)
第三代日期类:
JDK8引入
- LocalDate:只包含 年月日
- LocalTime:只包含 时分秒
- LocalDateTime:包含 年月日时分秒
//第三代日期类
LocalDateTime ldt = LocalDateTime.now();//LocalTime.now();LocalDate.now();
System.out.println(ldt);//2022-06-03T23:08:13.303
System.out.print("年="+ldt.getYear());
System.out.print(" 月="+ldt.getMonth());
System.out.print(" 月="+ldt.getMonthValue());
System.out.print(" 日="+ldt.getDayOfMonth());
System.out.print(" 时="+ldt.getHour());
System.out.print(" 分="+ldt.getMinute());
System.out.print(" 秒="+ldt.getSecond());
//年=2022 月=JUNE 月=6 日=3 时=23 分=14 秒=24
5、DateTimeFormatter
格式日期类
类似于SimpleDateFormat
//使用DateTimeFormatter
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy年MM月dd日 HH时mm分ss秒");
System.out.println(dateTimeFormatter.format(ldt));//2022年06月03日 23时20分06秒
6、Instant 时间戳
类似于Date
提供了一系列和Date类转换的方式
Instant —> Date:
Instant now = Instant.now();
System.out.println(now);//2022-06-03T15:25:41.571Z
Date date = Date.from(now);
System.out.println(date);//Fri Jun 03 23:26:42 CST 2022
Date —> Instant:
Instant instant = date.toInstant();
System.out.println(instant);//2022-06-03T15:27:50.716Z