Arrays
Array 的工具类
常用API:
public static String toString(int[] a)
:返回指定数组的内容的字符串表示形式public static void sort(int[] a)
:按照数字顺序排列指定的数组public static int binarySearch(int[] a, int key)
:利用二分查找返回指定元素的索引public static <T> List<T> 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
(左闭右开),伪随机地生成并返回
Date
构造器:
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)); }