Array 的工具类
常用API:
- public static String toString(int[] a):返回指定数组的内容的字符串表示形式
- public static void sort(int[] a):按照数字顺序排列指定的数组
- public static int binarySearch(int[] a, int key):利用二分查找返回指定元素的索引
- public static
List asList(T... a):返回由指定数组支持的列表
public class MyArraysDemo {
public static void main(String[] args) {
//按照数字顺序排列指定的数组
int [] arr = {3,2,4,6,7};
Arrays.sort(arr);
System.out.println(Arrays.toString(arr));
int [] arr = {1,2,3,4,5,6,7,8,9,10};
int index = Arrays.binarySearch(arr, 0);
System.out.println(index);
//1,数组必须有序
//2.如果要查找的元素存在,那么返回的是这个元素实际的索引
//3.如果要查找的元素不存在,那么返回的是 (-插入点-1)
//插入点:如果这个元素在数组中,他应该在哪个索引上.
}
}
Random
用于生成伪随机数。
使用步骤:
-
导入包:import java.util.Random
-
创建对象:Random r = new Random()
-
随机整数:int num = r.nextInt(10)
- 解释:10 代表的是一个范围,如果括号写 10,产生的随机数就是 0 - 9,括号写 20 的随机数则是 0 - 19
- 获取 0 - 10:int num = r.nextInt(10 + 1)
-
随机小数:public double nextDouble() 从范围 0.0d 至 1.0d (左闭右开),伪随机地生成并返回
构造器:
- public Date():创建当前系统的此刻日期时间对象。
- public Date(long time):把时间毫秒值转换成日期对象
方法:
- public long getTime():返回自 1970 年 1 月 1 日 00:00:00 GMT 以来总的毫秒数。
时间记录的两种方式:
- Date日期对象
- 时间毫秒值:从1970-01-01 00:00:00开始走到此刻的总的毫秒值。 1s = 1000ms
public class DateDemo {
public static void main(String[] args) {
Date d = new Date();
System.out.println(d);//Fri Oct 16 21:58:44 CST 2020
long time = d.getTime() + 121*1000;//过121s是什么时间
System.out.println(time);//1602856875485
Date d1 = new Date(time);
System.out.println(d1);//Fri Oct 16 22:01:15 CST 2020
}
}
public static void main(String[] args){
Date d = new Date();
long startTime = d.getTime();
for(int i = 0; i < 10000; i++){输出i}
long endTime = new Date().getTime();
System.out.println( (endTime - startTime) / 1000.0 +"s");
//运行一万次输出需要多长时间
}
DateFormat
DateFormat 作用:
- 可以把“日期对象”或者“时间毫秒值”格式化成我们喜欢的时间形式(格式化时间)
- 可以把字符串的时间形式解析成日期对象(解析字符串时间)
DateFormat 是一个抽象类,不能直接使用,使用它的子类:SimpleDateFormat
SimpleDateFormat 简单日期格式化类:
- public SimpleDateFormat(String pattern) : 指定时间的格式创建简单日期对象
- public String format(Date date) : 把日期对象格式化成我们喜欢的时间形式,返回字符串
- public String format(Object time) : 把时间毫秒值格式化成设定的时间形式,返回字符串!
- public Date parse(String date) : 把字符串的时间解析成日期对象
yyyy年MM月dd日 HH:mm:ss EEE a" 周几 上午下午
public static void main(String[] args){
Date date = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss);
String time = sdf.format(date);
System.out.println(time);//2020-10-18 19:58:34
//过121s后是什么时间
long time = date.getTime();
time+=121;
System.out.println(sdf.formate(time));
String d = "2020-10-18 20:20:20";//格式一致
Date newDate = sdf.parse(d);
System.out.println(sdf.format(newDate)); //按照前面的方法输出
}
Calendar
Calendar 代表了系统此刻日期对应的日历对象,是一个抽象类,不能直接创建对象
Calendar 日历类创建日历对象:Calendar rightNow = Calendar.getInstance()(饿汉单例模式)
Calendar 的方法:
- public static Calendar getInstance(): 返回一个日历类的对象
- public int get(int field):取日期中的某个字段信息
- public void set(int field,int value):修改日历的某个字段信息
- public void add(int field,int amount):为某个字段增加/减少指定的值
- public final Date getTime(): 拿到此刻日期对象
- public long getTimeInMillis(): 拿到此刻时间毫秒值
public static void main(String[] args){
Calendar rightNow = Calendar.getInsance();
int year = rightNow.get(Calendar.YEAR);//获取年
int month = rightNow.get(Calendar.MONTH) + 1;//月要+1
int days = rightNow.get(Calendar.DAY_OF_YEAR);
rightNow.set(Calendar.YEAR , 2099);//修改某个字段
rightNow.add(Calendar.HOUR , 15);//加15小时 -15就是减去15小时
Date date = rightNow.getTime();//日历对象
long time = rightNow.getTimeInMillis();//时间毫秒值
//700天后是什么日子
rightNow.add(Calendar.DAY_OF_YEAR , 701);
Date date d = rightNow.getTime();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println(sdf.format(d));//输出700天后的日期
}
LocalDateTime
JDK1.8 新增,线程安全
- LocalDate 表示日期(年月日)
- LocalTime 表示时间(时分秒)
- LocalDateTime 表示时间+ 日期 (年月日时分秒)
构造方法:
- public static LocalDateTime now():获取当前系统时间
- public static LocalDateTime of(年, 月 , 日, 时, 分, 秒):使用指定年月日和时分秒初始化一个对象
常用API:
| 方法名 | 说明 |
|---|---|
| public int getYear() | 获取年 |
| public int getMonthValue() | 获取月份(1-12) |
| public int getDayOfMonth() | 获取月份中的第几天(1-31) |
| public int getDayOfYear() | 获取一年中的第几天(1-366) |
| public DayOfWeek getDayOfWeek() | 获取星期 |
| public int getMinute() | 获取分钟 |
| public int getHour() | 获取小时 |
| public LocalDate toLocalDate() | 转换成为一个LocalDate对象(年月日) |
| public LocalTime toLocalTime() | 转换成为一个LocalTime对象(时分秒) |
| public String format(指定格式) | 把一个LocalDateTime格式化成为一个字符串 |
| public LocalDateTime parse(准备解析的字符串, 解析格式) | 把一个日期字符串解析成为一个LocalDateTime对象 |
| public static DateTimeFormatter ofPattern(String pattern) | 使用指定的日期模板获取一个日期格式化器DateTimeFormatter对象 |
public class JDK8DateDemo2 {
public static void main(String[] args) {
LocalDateTime now = LocalDateTime.now();
System.out.println(now);
LocalDateTime localDateTime = LocalDateTime.of(2020, 11, 11, 11, 11, 11);
System.out.println(localDateTime);
DateTimeFormatter pattern = DateTimeFormatter.ofPattern("yyyy年MM月dd日 HH:mm:ss");
String s = localDateTime.format(pattern);
LocalDateTime parse = LocalDateTime.parse(s, pattern);
}
}
| 方法名 | 说明 |
|---|---|
| public LocalDateTime plusYears (long years) | 添加或者减去年 |
| public LocalDateTime plusMonths(long months) | 添加或者减去月 |
| public LocalDateTime plusDays(long days) | 添加或者减去日 |
| public LocalDateTime plusHours(long hours) | 添加或者减去时 |
| public LocalDateTime plusMinutes(long minutes) | 添加或者减去分 |
| public LocalDateTime plusSeconds(long seconds) | 添加或者减去秒 |
| public LocalDateTime plusWeeks(long weeks) | 添加或者减去周 |
| public LocalDateTime minusYears (long years) | 减去或者添加年 |
| public LocalDateTime withYear(int year) | 直接修改年 |
| public LocalDateTime withMonth(int month) | 直接修改月 |
| public LocalDateTime withDayOfMonth(int dayofmonth) | 直接修改日期(一个月中的第几天) |
| public LocalDateTime withDayOfYear(int dayOfYear) | 直接修改日期(一年中的第几天) |
| public LocalDateTime withHour(int hour) | 直接修改小时 |
| public LocalDateTime withMinute(int minute) | 直接修改分钟 |
| public LocalDateTime withSecond(int second) | 直接修改秒 |
时间间隔 Duration 类API:
| 方法名 | 说明 |
|---|---|
| public static Period between(开始时间,结束时间) | 计算两个“时间"的间隔 |
| public int getYears() | 获得这段时间的年数 |
| public int getMonths() | 获得此期间的总月数 |
| public int getDays() | 获得此期间的天数 |
| public long toTotalMonths() | 获取此期间的总月数 |
| public static Durationbetween(开始时间,结束时间) | 计算两个“时间"的间隔 |
| public long toSeconds() | 获得此时间间隔的秒 |
| public long toMillis() | 获得此时间间隔的毫秒 |
| public long tonanos() | 获得此时间间隔的纳秒 |
public class JDK8DateDemo9 {
public static void main(String[] args) {
LocalDate localDate1 = LocalDate.of(2020, 1, 1);
LocalDate localDate2 = LocalDate.of(2048, 12, 12);
Period period = Period.between(localDate1, localDate2);
System.out.println(period);//P28Y11M11D
Duration duration = Duration.between(localDateTime1, localDateTime2);
System.out.println(duration);//PT21H57M58S
}
}
Math
Math 用于做数学运算
Math 类中的方法全部是静态方法,直接用类名调用即可:
| 方法 | 说明 |
|---|---|
| public static int abs(int a) | 获取参数a的绝对值 |
| public static double ceil(double a) | 向上取整 |
| public static double floor(double a) | 向下取整 |
| public static double pow(double a, double b) | 获取 a 的 b 次幂 |
| public static long round(double a) | 四舍五入取整 |
| public static int max(int a,int b) | 返回较大值 |
| public static int min(int a,int b) | 返回较小值 |
| public static double random() | 返回值为 double 的正值,[0.0,1.0) |
public class MathDemo {
public static void main(String[] args) {
// 1.取绝对值:返回正数。
System.out.println(Math.abs(10));
System.out.println(Math.abs(-10.3));
// 2.向上取整: 5
System.out.println(Math.ceil(4.00000001)); // 5.0
System.out.println(Math.ceil(-4.00000001));//4.0
// 3.向下取整:4
System.out.println(Math.floor(4.99999999)); // 4.0
System.out.println(Math.floor(-4.99999999)); // 5.0
// 4.求指数次方
System.out.println(Math.pow(2 , 3)); // 2^3 = 8.0
// 5.四舍五入 10
System.out.println(Math.round(4.49999)); // 4
System.out.println(Math.round(4.500001)); // 5
System.out.println(Math.round(5.5));//6
}
}
DecimalFormat
使任何形式的数字解析和格式化
public static void main(String[]args){
double pi = 3.1415927; //圆周率
//取一位整数
System.out.println(new DecimalFormat("0").format(pi)); //3
//取一位整数和两位小数
System.out.println(new DecimalFormat("0.00").format(pi)); //3.14
//取两位整数和三位小数,整数不足部分以0填补。
System.out.println(new DecimalFormat("00.000").format(pi));// 03.142
//取所有整数部分
System.out.println(new DecimalFormat("#").format(pi)); //3
//以百分比方式计数,并取两位小数
System.out.println(new DecimalFormat("#.##%").format(pi)); //314.16%
long c =299792458; //光速
//显示为科学计数法,并取五位小数
System.out.println(new DecimalFormat("#.#####E0").format(c));//2.99792E8
//显示为两位整数的科学计数法,并取四位小数
System.out.println(new DecimalFormat("00.####E0").format(c));//29.9792E7
//每三位以逗号进行分隔。
System.out.println(new DecimalFormat(",###").format(c));//299,792,458
//将格式嵌入文本
System.out.println(new DecimalFormat("光速大小为每秒,###米。").format(c));
}



