可变字符串
StringBuilder
介绍:对象创建后可以通过调用方法改变其封装的字符序列,java的字符串连接的过程是利用StringBuilder实现的(通过append()实现,StringBuilder.toString()可以转化为字符串)
构造方法: public StringBuilder()
public StringBuilder(String str)
常用方法:
注意:方法返回的是StringBuilder对象,可以连续.append
StringBuffer
介绍:和StringBuilder同一个父类,字符串内容计算采用StringBuilder性能更好
对比:StringBuffer是线程安全的,同步处理的,性能稍慢
StringBuilder是非线程安全的,并发处理的,性能稍快
StringJoiner
介绍:JDK1.8+中引入,字符串拼接对象
方法 | 说明 |
---|---|
StringJoiner("") | 构造方法,以某个符合分割 |
add("") | 添加字符串 |
length() | 获取字符串长度(包括分割符) |
merge(StringJoiner("")) | 拼接另一个StringJoiner内容 |
API Math
属于lang包下的一个工具类,使用时无需导包,该类中的方法为静态方法,通过Math.方法名()调用
常量 | 说明 |
---|---|
static final double E | 自然底数E |
static final double PI | 圆周率π |
方法 | 说明 |
---|---|
static double random() | 生成[0.0,1.0)区间的小数,不包括1.0 |
static int abs(int a) | 获取一个数的绝对值 |
static int max(int a, int b) | 返回参数值最大的数 |
static int min(int a, int b) | 返回参数值最小的数 |
static double pow(double a, double b) | 获取a^b |
static double sin(double a) | 返回一个数的正弦值 |
static double cos(double a) | 返回一个数的余弦值 |
static double tan(double a) | 返回一个数的正切值 |
static double asin(double a) | 反三角函数,返回一个数的反正切值 |
double toRadians(double angdeg) | 获取弧度 |
static double sqrt(double a) | 获取一个数的平方根 |
static double cbrt(double a) | 获取一个数的立方根 |
static double ceil(double a) | 向上取整 |
static double floor(double a) | 向下取整 |
static long round(double a) | 四舍五入 |
生成随机数可以扩大倍数后强转成整数(可以取整),再进行加减限定范围
BigDecimal
介绍:用来对超过16位有效位的数进行精确的运算,解决基本浮点型的精度丢失问题
格式:BigDecimal bigDecimal=new BigDecimal(String val);//可以直接转String
方法 | 说明 |
---|---|
BigDecimal add(BigDecimal augend) | 计算数的和 + |
BigDecimal subtract(BigDecimal subtrahend) | 计算数的差 - |
BigDecimal multiply(BigDecimal multiplicand) | 计算数的积 * |
BigDecimal divide(BigDecimal divisor) | 计算数的商 / |
//除法:当不能除尽时,需要指定保留小数的位数,否则报错 //通过scale保留多少位 RoundingMode指定保留规则 System.out.println(bigDecimal.divide(bigDecimal2,3,RoundingMode.UP));//3.14*1.2
时间日期
System类
介绍:System
类提供的public static long currentTimeMillis()
用来返回当前时间与1970年1月1日0时0分0秒之间以毫秒为单位的时间差。(System.currentTimeMillis())
特点:该方法不能精确表示时间,只能用于表示当前时刻距离时间纪元的毫秒差
Data类
介绍:java.util.Date 类封装了日期及时间信息。
Date
类的API
不易于国际化,大部分被废弃了,后面使用Calendar表示具体日期
构造方法 | 说明 |
---|---|
public Date() | 创建表示当前时间的Date对象 |
public Date(long date) | 创建指定毫秒数的Date 对象 |
日期匹配字符
SimpleDateFormat
介绍:一个以与语言环境有关的方式来格式化和解析日期的具体类,它允许进行格式化(日期->文本)、解析(文本->日期)和规范化
构造方法:SimpleDateFormat();
SimpleDateFormat(String pattern)用给定的模式和默认语言环境日期格式符号构造
("yyyy-MM-dd HH:mm:ss")
方法:final String format(Date date) Date->String
Date parse(String source)throws ParseException String->Date
Calendar
介绍:用于封装日历信息,可以对时间分量进行运算,是抽象类,具体子类针对不同国家的日历系统,其中应用对广泛的是格里高里历(通用的阳历),对应世界上绝大多数国家/地区的标准日历系统
getInstance方法(用来获取一个通用对象)
Calendar calendar=Calendar.getInstance();//创建Calendar对象
常量 | 说明 |
---|---|
static int YEAR | 获取当前日期的年份,默认值为1 |
static int MONTH | 获取当前日期的月份,默认值为2 月份从0-11,使用时要注意+1 |
static int DATE | 获取当前日期的天数,默认值为5 |
static int DAY_OF_MONTH | 获取当前日期在当前月的第多少天,默认值为5 此常量和DATE含义一致 |
static int DAY_OF_WEEK | 获取当前日期是本周的第几天,默认值为7, 星期日为1 星期一为2...星期六为7 |
static int DAY_OF_YEAR | 获取当前日期是一年中的第几天,默认值为6 |
static int DAY_OF_WEEK_IN_MONTH | 获取当前日期是当前月的第几周,默认值为8 |
static int WEEK_OF_YEAR | 获取当前日期是一年中的第几周,默认值为3 |
static int HOUR | 获取当前时间是一天中的第几小时 默认值为10, 0-11,12点用0表示 |
static int HOUR_OF_DAY | 获取当前时间是一天中的第几小时 默认值为11, 24小时制 |
static int MINUTE | 获取当前时间是第几分钟 默认值为12 |
static int SECOND | 获取当前时间是第几秒 默认值为13 |
常量一般配合get方法来获取指定日期的时间分量
方法名 | 说明 |
---|---|
public int get(int field) | 获取指定时间分量的值 |
Set方法名 | 说明 |
---|---|
void set(int field, int value) | 指定日期分量和分量的值 |
void set(int year, int month, int date) | 设置指定日期,参数为年月日 |
add方法名 | 说明 |
---|---|
void add(int field, int amount) | 给指定时间分量(YEAR,MONTH,DATE)增加值,整数为增加,负数为减少 |
java.time
介绍:JDK1.8之后全新的日期时间定义方法
分类:LocalDate代表IOS格式(yyyy-MM-dd)的日期,可以存储 生日、纪念日等日期。
LocalTime表示一个时间,而不是日期。
LocalDateTime是用来表示日期和时间的,这是一个最常用的类之一。
其他:ZoneId 获取各个时区 我国时区 Etc/GMT-8
DateTimeFormatter 格式化日期
方法名 | 说明 |
---|---|
now() / now(ZoneId zone) | 静态方法,根据当前时间创建对象/指定时区的对象 |
of() | 静态方法,根据指定日期/时间创建对象 |
getDayOfMonth()/getDayOfYear() | 获得月份天数(1-31) /获得年份天数(1-366) |
getMonthValue() / getYear() | 获得月份(1-12) /获得年份 |
getHour()/getMinute()/getSecond() | 获得当前对象对应的小时、分钟、秒 |
withYear() | 将年份修改为指定的值并返回新的对象 |
withMonth() | 将月份修改为指定的值并返回新的对象 |
withDayOfMonth( ) | 将月份天数修改为指定的值并返回新的对象 |
withDayOfYear() | 将年份天数修改为指定的值并返回新的对象 |
format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")) | 将对象格式化成指定形式的日期 |
日期比较:
方法名 | 说明 |
---|---|
public boolean isBefore(ChronoLocalDate other) | 判断日期是否在另一个日期之前 |
public boolean isAfter(ChronoLocalDate other) | 判断日期是否在另一个日期之后 |
public boolean isEqual(ChronoLocalDate other) | 判断两个日期是否相同 |
数组排序
Arrays类
介绍:Arrays继承了Object类,位于java.util包下,使用前需先import导包。包含了用来操作数组的各种方法,比如排序和搜索。
方法名 | 说明 |
---|---|
copyOf(T[] original, int newLength) | 复制一个数组 |
void sort(int[] a) | 对数组进行排序,从小到大 |
List<T> asList(T... a) | 把数组转集合 |
对象数组排序
当数组是一个实体类对象时,不能直接使用Arrays.sort()对数组排序,需要自定义排序规则
实现:Comparable接口(实体类需要实现该接口,并重写compareTo方法)
compareTo重写规则:
-
选取实体类中某些字段值或长度作为比较规则
-
当方法返回小于0的数时,表示按照该规则从小到大排序
-
当方法返回大于0的数时,表示按照该规则从大到小排序
实体类可以不实现Comparable接口,使用匿名内部类形式创建Comparator对象,进行排序
Cat[] cats=new Cat[3]; cats[0]=new Cat(101,"tom1",5); cats[1]=new Cat(100,"tom2",1); cats[2]=new Cat(103,"tom3",3); Arrays.sort(cats, new Comparator<Cat>() { @Override public int compare(Cat cat, Cat t1) { return cat.getId()-t1.getId(); } });
Q&A
解释下列方法的含义
方法 | 含义 |
---|---|
static double random() | 生成一个区间[0.0,1.0)的小数 |
static double pow(double a, double b) | a的b次方 |
static double sqrt(double a) | a的平方根 |
static double cbrt(double a) | a的立方根 |
static double ceil(double a) | 向上取整 |
static double floor(double a) | 向下取整 |
static long round(double a) | 四舍五入 |
如何将Date类型格式化成yyyy-MM-dd HH:mm:ss形式
创建一个SimpleDateFormat对象,把日期格式“yyyy-MM-dd HH:mm:ss”传入构造方法,调用SimpleDateFormat对象的format()方法,传入Date类型参数
解释下列方法含义
方法名 | 含义 |
---|---|
now() / now(ZoneId zone) | 根据当前时间创建对象/指定时区的对象 |
of() | 根据指定日期/时间创建对象 |
getDayOfMonth()/getDayOfYear() | 获取月份天数/获取年份天数 |
getMonthValue() / getYear() | 获取月份/获取年份 |
getHour()/getMinute()/getSecond() | 获取当前对象的小时、分钟、秒 |
对象数组排序的写法有哪些
-
实体类需要实现该接口,并重写compareTo方法
-
实体类不实现Comparable接口,使用匿名内部类形式创建Comparator对象