[2025.1.5 JavaSE学习]Arrays排序方法重写 && 大数类 && Date && Calendar

Arrays排序方法重写

  • 排序方法:可以调用默认sort方法,也可以自己进行重载,Java_Arrays实现了Comparator接口的匿名内部类,要求实现compare方法
Arrays.sort(arr, new Comparator(){
	@Override
	public int compare(Object o1,Object o2){
		Integer i1 = (Integer)o1;
		Integer i2 = (Integer)o2;
		return i2 - i1;
	}
})

底层为binarySort,即二分排序。这种排序方法的重写充分体现了接口编程+动态绑定+匿名内部类的的综合使用


大数类

  • long不够用时,可以使用BigInteger:
    在对BigInteger进行加减乘除的时候,需要使用对应的方法,不能直接进行 + - * /操作,需要使用add()、substract()、multiply()、divide()进行计算
  • double不够用时,可以使用BigDecimal
    计算时可能会抛出ArithmeticException(除不尽、无限不循环小数)
  • ArithmeticException解决方案:调用divide方法时指定精度:
bigDecimal.divide(bigDecimal2, BigDecimal.ROUND_CEILING);
//如果有无限循环小数就会保留分子的精度,分子是小数两位,则保留两位

Date

Date d1 = new Date();
  • 获取当前系统时间
  • 这里的Date类是在java.util包下
  • 默认输出的日期格式是国外的格式,通常需要对格式进行转换:
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 hh:mm:ss E");
String format = sdf.format(d1);//将日期转换为指定格式字符串
Date parse = sdf.parse(str);//将格式化字符串转换为Date

具体格式要求如下:
image


Calendar

  • Calendar是一个抽象类,并且构造器是private
  • 可以通过getInstance()来获取实例
  • 提供了大量方法和字段
  • 应用实例:
    image

  • 如果需要24小时进制来获取时间:
    Calendar.HOUR改为Calendar.HOUR_OF_DAY

  • Calendar存在如下问题:

    • 可变性:像日期和时间这样的类应该是不可变的
    • 偏移性:Date中的年份是从1900年开始的,而月份都从0开始
    • 格式化:格式化只对Date有用,Calendar则不行
    • 此外,Date和Calendar也不是线程安全的,不能处理闰秒等(每隔2天,多出1s)
  • 解决方法(第三代日期)

    • JDK8加入LocalDate(日期/年月日)、LocalTime(时间\时分秒)、LocalDateTime(日期时间/年月日时分秒)
    • 具体使用方法可以实时查询API......
posted @ 2025-01-06 02:02  Luna-Evelyn  阅读(57)  评论(0)    收藏  举报