Java复习知识点十六:常用类:Math、Arrays类、System、BigInteger、BigDecimal、日期类Date

1、Math类

Math类常用方法:

  • abs():求绝对值

  • pow():求幂

  • ceil():向上取整,返回 >= 该参数的最小整数(最后会转成double)

  • floor():向下取整,返回 <= 该参数的最大整数(最后会转成double)

  • round():四舍五入

  • sqrt():求开方

  • random():返回的是0-1之间的一个随机小数(0 <= x < 1)

    //练习:获取一个a-b之间的一个随机整数
    int num = (int)(a + Math.random()*(b-a+1))
    
  • min():返回最小值

  • max():返回最大值

2、Arrays类

常用方法的应用:

  1. toString:返回数组的字符串形式

    Arrays.toString(arr);
    
    int[] arr = {2,3,5,6};
    String s = Arrays.toString(arr);
    System.out.println(s);
    //输出:[2,3,5,6]
    
  2. sort:排序【自然排序和定制排序】

    Integer[] arr = {2,-1,7,6};
    //String s = Arrays.toString(arr);
    //        //System.out.println(s);
    
    //sort方法的使用
    //1.因为数组是引用数据类型,所以通过sort排序后,会直接影响到实参
    
    Arrays.sort(arr);
    System.out.println(Arrays.toString(arr));
    
    
  3. sort( T[ ] a, Comparator<? super T> c):自定义排序规则

    //通过传入一个接口Comparator实现,定制排序
    
    Integer[] arr2 = {2,-1,7,6};
    //1.进入sort方法
    //2.进入到TimeSort.sort方法
    //3.进入binarySort(T[] a, int lo, int hi, int start,Comparator<? super T> c) 
    //4.执行到binarySort方法的代码,会格局动态绑定机制c.compare()执行我们传入的匿名内部类的compare()
    /*
    while (left < right) {
    	int mid = (left + right) >>> 1;
        if (c.compare(pivot, a[mid]) < 0)
        	right = mid;
        else
        	left = mid + 1;
    }
    */
    Arrays.sort(arr2, new Comparator<Integer>() {
                @Override
                public int compare(Integer o1, Integer o2) {
                    return o2 - o1;
                }
            });
    
  4. binarySearch:二分查找方法,要求必须排好序

    Integer[] arr = {1,4,67,88,90};
    
    //1.binarySearch 通过二分查找法进行查找,要求必须排好序
    //2.如果数组不存在该元素,就返回 return -(low + 1);  // key not found.
    //low代表应该存在的位置
    
    int index = Arrays.binarySearch(arr, 89);
    System.out.println("index:" + index);
    
  5. copyOf:数组元素的复制

    Integer[] arr = {1,4,67,88,90};
    
    //copyOf 数组元素的复制
    //1.从arr数组中拷贝?个元素到新数组中
    //2.如果拷贝长度 > arr.length 就在新数组的后面 增加 null
    //3.如果拷贝长度 < 0 就会发生异常NegativeArraySizeException
    //4.该方法的底层使用的是 System.arraycopy();
    
    Integer[] newArr = Arrays.copyOf(arr, arr.length+2);
    System.out.println(Arrays.toString(newArr));//[1, 4, 67, 88, 90, null, null]
     
    
  6. fill:数组元素填充

    //fill 数组元素填充
    
    Integer[] num = new Integer[]{9,3,2};
    
    //使用 99 去填充 num数组, 可以理解为替换原来所有的元素
    
    Arrays.fill(num,99);
    System.out.println(Arrays.toString(num));//[99, 99, 99]
        
    
  7. equals:比较两个数组元素是否一致

    boolean equals = Arrays.equals(arr1, arr2);
    
  8. asList:将一组值转换成List集合

    //asList
    
    List<Integer> list = Arrays.asList(1, 2, 3, 4);
    
    //1.编译类型:List
    //2.运行类型:为Array中的静态内部类 
    // private static class ArrayList<E> extends AbstractList<E>
    //        implements RandomAccess, java.io.Serializable
    
    System.out.println("list:" + list);//list:[1, 2, 3, 4]
    System.out.println("list的运行类型:" + list.getClass());//list的运行类型:class java.util.Arrays$ArrayList
        
    

    Arrays.asList方法源码:
    在这里插入图片描述

    Arrays的内部类: 包含了ArrayList类

    在这里插入图片描述

12、System类

常用方法:

  1. exit:退出当前程序

  2. arraycopy:复制数组元素,比较适合底层调用,一般使用Arrays.copyOf完成复制数组

    int[] src = {1,2,3};
    int[] dest = new int[3];
    System.arraycopy(src, 0, dest, 0, 3);
    
  3. currentTimeMillens:返回当前时间距离1970-1-1的毫秒数

  4. gc:运行垃圾回收机制System.gc();

13、BigInteger和BigDecimal类

编程中,需要处理很大的整数时,long不够用
可以使用BigInteger的类来搞定

注意:

在对BigInteger进行加减乘除的时候,需要使用对应的方法,不能直接进行 + - *。要使用对应的方法

 //编程中,需要处理很大的整数时,long不够用
        //可以使用BigInteger的类来搞定

        BigInteger bigInteger = new BigInteger("2344444444444444444");
        System.out.println(bigInteger);

        //1.在对BigInteger进行加减乘除的时候,需要使用对应的方法,不能直接进行 + - * /
        //加法
        BigInteger bigInteger1 = new BigInteger("100");
        BigInteger add = bigInteger.add(bigInteger1);
        System.out.println(add);//2344444444444444544
        //减法
        BigInteger subtract = bigInteger.subtract(bigInteger1);
        System.out.println(subtract);//2344444444444444344
        //乘法
        BigInteger multiply = bigInteger.multiply(bigInteger1);
        System.out.println(multiply);//234444444444444444400
        //除法
        BigInteger divide = bigInteger.divide(bigInteger1);
        System.out.println(divide);//23444444444444444

当我们需要保存一个精度很高的数时,double不够用

可以使用 BigDecimal类

注意:

也不能直接加减乘除,要调用相应方法

除法 除不尽时,会抛出异常,若想避免可在方法中指定精度

BigDecimal bigDecimal = new BigDecimal("199.111111111111199999999999");
        BigDecimal bigDecimal1 = new BigDecimal("1.1");
        //加法
        System.out.println(bigDecimal.add(bigDecimal1));
        //减法
        System.out.println(bigDecimal.subtract(bigDecimal1));
        //乘法
        System.out.println(bigDecimal.multiply(bigDecimal1));
        //除法 除不尽时会抛出异常ArithmeticException
        //解决办法:在调用divide方法时,指定精度即可
        //System.out.println(bigDecimal.divide(bigDecimal1));
        System.out.println(bigDecimal.divide(bigDecimal1,BigDecimal.ROUND_CEILING));

14、日期类

1、Date

第一代日期类

java.util.Date

//获取当前系统时间
Date d1 = new Date();
System.out.println(d1);//Fri Jun 03 22:25:13 CST 2022

2、SimpleDateFomat

格式化日期

//格式化日期
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy年MM月dd日 hh:mm:ss E");
String format = dateFormat.format(d1);
System.out.println(format);//2022年06月03日 10:31:21 星期五

在这里插入图片描述

3、Calendar

第二代日期类

java.util.Calendar

//1. Calendar是一个抽象类,并且构造器是private
//2.可以通过getInstance()来获取实例
//3.提供大量的方法和字段提供给程序员
//4.Calendar 没有专门的格式化方法,所有需要自己来组合显示

Calendar c = Calendar.getInstance();
System.out.println(c);
//输出的是所有字段
//java.util.GregorianCalendar[time=1654267403072,areFieldsSet=true,areAllFieldsSet=true,lenient=true,
//zone=sun.util.calendar.ZoneInfo[id="Asia/Shanghai",offset=28800000,dstSavings=0,useDaylight=false,
//transitions=29,lastRule=null],firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,YEAR=2022,MONTH=5,WEEK_OF_YEAR=23,
//WEEK_OF_MONTH=1,DAY_OF_MONTH=3,DAY_OF_YEAR=154,DAY_OF_WEEK=6,DAY_OF_WEEK_IN_MONTH=1,AM_PM=1,HOUR=10,HOUR_OF_DAY=22,
//MINUTE=43,SECOND=23,MILLISECOND=72,ZONE_OFFSET=28800000,DST_OFFSET=0]
//获取日历对象的某个日历字段
System.out.println("年:" +c.get(Calendar. YEAR));
System.out.println("月:" + (c.get(Calendar.MONTH) + 1));
System.out.println("日:" +c.get(Calendar.DAY_OF_MONTH));
System.out.println("小时:" + c.get(Calendar . HOUR));
System.out.println("分钟:" + c.get(Calendar . MINUTE));
System.out.println("秒:" + c.get(Calendar.SECOND));
//Calendar 没有专门的格式化方法,所有需要自己来组合显示
System.out.println(c.get(Calendar. YEAR)+"年"+(c.get(Calendar.MONTH) + 1)+"月"+c.get(Calendar.DAY_OF_MONTH)+"日");
//2022年6月3日

4、LocalDate、LocalTime、LocalDateTime

前面两代日期类的不足分析:

JDK1.0中包含了一个java.util.Date类,但是它的大多数方法已经在JDK 1.1引入Calendar类之后被弃用了。

而Calendar也存在问题是:

  1. 可变性:像日期和时间这样的类应该是不可变的
  2. 偏移性:Date中的年份是从1900年开始的,而月份都是从0开始。
  3. 格式化:格式化只对Date有用,Calendar则不行。
  4. 此外,他们也都不是线程安全的;不能处理闰秒等(每个2天,多出1s)

第三代日期类:

JDK8引入

  1. LocalDate:只包含 年月日
  2. LocalTime:只包含 时分秒
  3. LocalDateTime:包含 年月日时分秒
 //第三代日期类
 LocalDateTime ldt = LocalDateTime.now();//LocalTime.now();LocalDate.now();
 System.out.println(ldt);//2022-06-03T23:08:13.303

System.out.print("年="+ldt.getYear());
System.out.print(" 月="+ldt.getMonth());
System.out.print(" 月="+ldt.getMonthValue());
System.out.print(" 日="+ldt.getDayOfMonth());
System.out.print(" 时="+ldt.getHour());
System.out.print(" 分="+ldt.getMinute());
System.out.print(" 秒="+ldt.getSecond());
//年=2022 月=JUNE 月=6 日=3 时=23 分=14 秒=24

5、DateTimeFormatter

格式日期类

类似于SimpleDateFormat

//使用DateTimeFormatter
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy年MM月dd日 HH时mm分ss秒");
System.out.println(dateTimeFormatter.format(ldt));//2022年06月03日 23时20分06秒

6、Instant 时间戳

类似于Date

提供了一系列和Date类转换的方式

Instant —> Date:

 Instant now = Instant.now();
 System.out.println(now);//2022-06-03T15:25:41.571Z
 Date date = Date.from(now);
 System.out.println(date);//Fri Jun 03 23:26:42 CST 2022

Date —> Instant:

Instant instant = date.toInstant();
System.out.println(instant);//2022-06-03T15:27:50.716Z
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值