一,Math
Math是lang包中的一个包含了用于执行基本数学运算方法的类,如初等指数、对数、平方根和三角函数。
注:
- Math类是final的
- Math类的构造函数是private的
- Math类的成员都是static的
静态常量:
- E:自然对数的底数
- PI:圆周率
常用方法:
- pow(a,b) a的b次方
- sqrt(n): 开平方根
- max(a,b) 返回a和b的较大值
- min(a,b) 返回a和b的较小值
- abs(n) 返回绝对值
- random() 返回[0,1)的浮点小数
- rint(n) 五舍六入
- round(n) 四舍五入
- toRadians(n) 角度转弧度值
- toDegrees(n)
二,Random
调用这个Math.Random()函数能够返回带正号的double值,该值大于等于0.0且小于1.0,即取值范围是[0.0,1.0)的左闭右开区间,返回值是一个伪随机选择的数,在该范围内(近似)均匀分布。例子如下:
第一种:java.lang.Math.Random;
-
package com.zoo.lion.util; public class RandomCoder { public static void main(String[] args) { random(); } private static void random() { double random = Math.random();//产生一个[0,1)之间的随机数 System.out.println(random); } }
第二种:java.util.Random
此类的实例用于生成伪随机数流。
常用方法:
nextInt()
nextInt(bound)
随机[n,m],公式:r.nextInt(m-n+1)+n
nextDouble() 用于从此随机值生成器生成介于0.0和1.0之间的下一个伪随机双精度值
三,Scanner
一个可以解析基本类型和字符串的文本扫描器
常用方法:
next() /*它会自动地消除有效字符之前的空格,只返回输入的字符,不会得到带空格的字符串。也就是说如果输入了一串字符,到了有空格的时候就 会停止录入,只录入空格前面的东西,空格后面的东西(包括分隔的空格都会保留在缓存区域)
除了空格以外,Tab键和Enter键都被视为分隔符(结束符)。*/
nextLine() //只有enter结束录入
nextInt()
nextInt(n):表示输入指定进制的数据,返回对应的十进制数,例如,n为2时,表示输入的数据是二进制数,返回对应的十进制
nextDouble() 用于从此随机值生成器生成介于0.0和1.0之间的下一个伪随机双精度值
注:输入类型与接收类型不匹配时,会发生
InputMismatchException
输入不匹配异常
四,Arrays
此类包含用来操作数组的各种方法。
注:
- Arrays类中的方法都是static的
- Arrays类中的构造函数是private的
常用方法:
toString()
binarySearch()
- binarySearch(数组,要查找的元素)
- binarySearch(Object[] a,int fromIndex,int toIndex,Object key); //在指定范围内查找某一元素
注:使用binarySearch的前提必须保证数组是升序的,并且元素值是唯一的
sort():对数组元素进行排序
对数组中的对象属性进行排序
方式一:
使用sort(Object[] o)的步骤:
(1)使自定义类实现Comarable接口
(2)重写compareTo()方法
升序:
this.属性 - 参数.属性
降序:
参数.属性 - this.属性
方式二:
使用sort(Object[] o,Comparator c)的步骤:
(1)创建自定义类实现Comparator接口
(2)重写compare()方法
升序:
o1.属性 - o2.属性
降序:`o2.属性 - o1.属性`
(3)创建实现类对象,作为参数传入sort()方法中
Arrays.sort(emps,new Comparator<Emp>(){ @Override public int compare(Emp o1, Emp o2) { // 按工资升序,工资相同时,按年龄升序 return o1.salary != o2.salary ? (int)(o1.salary * 100 - o2.salary * 100) : o1.age - o2.age; } });
fill()
equals()
copyOf()
五,Date
类 Date表示特定的瞬间,精确到毫秒。
package Demo1; import java.text.SimpleDateFormat; import java.util.Date; public class work2 { /** * 计算自己已经生存的天数 * @param args */ public static void main(String[] args) throws Exception{ String startTime = "2001-07-06"; SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); Date date = sdf.parse(startTime); long birthdayTime = date.getTime(); long nowBirthday = System.currentTimeMillis(); System.out.println((nowBirthday - birthdayTime) / 1000 / 24 / 3600); } }
功能:
- 把日期解释为年、月、日、小时、分钟和秒值。被Calendar取代
- 格式化和解析日期字符串。被DateFormat取代
构造函数:
- Date() 返回1970.1.1 00:00:00到此时经历的毫秒数
- Date(long l) 1970.1.1 00:00:00 + long毫秒数后的 时间
常用方法:
- getTime():获取1970年1月1日到指定Date对象指向的日期之间经历的毫秒数
六,SimepleDateFormat
SimpleDateFormat是一个以与语言环境有关的方式来格式化和解析日期的具体类
格式化(日期->文本):将一个Date对象转换成指定格式的字符串
解析(文本 -> 日期):将一个符合指定格式的日期字符串转换成一个Date对象
格式化:
Date d = new Date(); // 创建SimpleDateFormat对象,并指定格式 SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日HH时mm分ss秒"); String time = sdf.format(d);
解析:
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Date date = sdf.parse("1986-10-19 17:30:30");
完整代码:
import java.text.SimpleDateFormat; import java.util.Date; public class Test { public static void main(String[] args) throws Exception { // forMate(); parse(); } //TODO 解析格式 private static void parse() throws Exception{ String s = "2023年11月18日"; SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日"); Date d = sdf.parse(s); System.out.println(d); } //TODO 为日期设置格式 private static void forMate() { //给 SimpleDateFormat 设置格式 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); //传入Date对象指定需要设置的时间 否则默认输出 1970-01-01 08:00:00 String time = sdf.format(new Date()); System.out.println(time); } }
eg:一个比较简单的题目为例:计算自己从出生到现在所经历的天数
package Demo1; import java.text.SimpleDateFormat; import java.util.Date; public class work2 { /** * 计算自己已经生存的天数 * @param a_hao */ public static void main(String[] args) throws Exception{ String startTime = "2001-07-06"; SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); Date date = sdf.parse(startTime); long birthdayTime = date.getTime(); long nowBirthday = System.currentTimeMillis(); System.out.println((nowBirthday - birthdayTime) / 1000 / 24 / 3600); } }
七,Calendar
Calendar类是一个抽象类,它为特定瞬间与日历字段之间的转换提供了一些方法。
Calendar提供了一个类方法
getInstance
,以获得此类型的一个通用的对象,其日历字段已由当前日期和时间初始化常用方法:
get(n):根据指定的日历字段获取字段值
set(year,month,date,hour,minute,second)
set(field,value):为指定的日历字段设置值
getTimeInMillis():获取1970年1月1日到指定Calendar对象指向的日期之间经历的毫秒数
getTime():获取Calendar对象的Date对象
package calendar; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; public class Demo2 { public static void main(String[] args) throws Exception{ //计算从当前时间到目标时间还需经历多少分钟 funtionOne(); funtionTwo(); } private static void funtionTwo() { Calendar calendar = Calendar.getInstance(); long nowTime = calendar.getTimeInMillis(); //月数从零开始,也就是说没有12月,0即是一月 calendar.set(2023 , 10 , 19 , 6 , 0 , 0); long endTime = calendar.getTimeInMillis(); System.out.println((endTime - nowTime) / 60 / 1000); } private static void funtionOne() throws Exception{ Calendar calendar = Calendar.getInstance(); String endTime = "2023-11-19 06:00:00"; SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); System.out.println(sdf.parse(endTime)); long time = sdf.parse(endTime).getTime(); long nowTime = new Date().getTime(); System.out.println((time - nowTime) / 60 / 1000); } }