美文网首页
JaveSE进阶(常用API)

JaveSE进阶(常用API)

作者: 扶光_ | 来源:发表于2023-08-10 21:21 被阅读0次

    一,日期与时间

    Date类

    当前所在系统的此刻日期和时间
    Date d = new Date();sout(d);

    • 1获取对象毫秒值 getTime()
    • 2获取当前时间毫秒值currentTimeMillis()

    SimpleDateFormat类

    可以把Date对象或时间毫秒值格式化成我们喜欢的时间格式
    可以把字符串的时间形式解析成日期对象
    2020-11-11 13.27.06 ----yyyy-MM-dd HH:mm:ss
    SimpleDateFormat sdf = new SimpleDateFormat(yyyy-MM-dd HH:mm:ss);
    String rs = sdf.format(d);

    将字符串解析成日期对象
    parse ()

    • before()是否在日期前
    • after() 是否在日期后

    Calendar类

    代表了此刻日期对应的日历对象
    是一个抽象类,不能直接创建对象

    //1.拿到日历对象
    Calendar cal = Calendar.getInstance();
    //2获取日历信息 拿年
    int year = cal.get(Calendar .YEAR);
    //修改日历中的某个字段 
    cal.set(Calendar.HOUR,4);//将小时设置为4
    //添加值,如64天后是什么时间
    cal.add(Calendar.DAY_OF_YEAR,64);
    //拿到此刻日期对象
    Date d = cal.getTime();
    

    LocateDate LocalTime,LocateDateTime,分别表示日期,时间,日期时间对象

    LocateDate ld = new LocateDate();
    int year = newDate.getYear();
    

    instant 时间戳

    Instant u = new Instant();
    sout(u.atZone(ZoneId.systemDefault()));//拿到当前系统时间戳
    Date d = Date.from(u);//将时间戳转换为日期对象

    DateTimeFormatter 日期时间格式器

    DateTimeFormatter  dtf = new DateTimeFormatter.ofpattern("yyyy-MM-dd HH:mm:ss");
    String ldtStr = ldt.format(dtf);
    

    Duration/Period 计算日期间隔差异

    比如我们用当前时间减去生日

    LocalDate today = LocalDate.now();
    LocalDate birthday = LocalDate.of(2001,5,31);
    Period p = Period.between(birthday,today) ;//第二个参数减去第一个参数
    sout(period.getYears());
    

    而Duration算的是比较清楚的,能算两个时间差真正隔多少天多少分多少秒

    toDays() toHours() toMinutes()

    二,包装类

    其实就是八种基本类似所对应的引用类型

    基本数据类型 引用数据类型
    byte Byte
    short Short
    int Integer
    long long
    char Character
    double Double
    boolean Boolean

    为什么提供包装类?
    java为了实现一切皆对象,所以提供了对应的引用类型
    集合和泛型也只能支持包装类,不支持基本数据类型

    • 自动装箱 就是将基本数据类型赋值给引用数据类型
      int a = 1;
      Integer b = a;
    • 自动拆箱 就是将引用数据类型赋值给基本数据类型
      Integer a = 1;
      int a = b;

    结果毫不影响
    包装类的容错率更好 他可以被null赋值
    可以把基本数据类型转换为字符串类型
    1调用toString方法
    2调用integer.toString(基本数据类型)
    **可以把字符串类型的数值转换成真实的数据类型
    1 integer.parseInt("字符串类型的整数")
    2 Double.parseDouble("字符串类型的小数")

    三,正则表达式

    • 可以用一些规定的字符来制定规则,并用来检验数据格式的合法性
      如6-20位数字
    qq.matches("\\d{6,20}")//\d表示全部都是数字  //转义为/
    

    [abc] 只能是abc
    [^abc] 除了abc以外的字符
    [a-zA-Z] 范围
    \D 非数字
    \w 英文,数字,下划线
    字符串对象提供了匹配正则表达式规则的API
    "a".matches("[abc]")//true 只能匹配一个字符
    *0次或多次 +1次或多次 {n}正好n次 x{n,}至少n次 x{n,m}n-m之间次

    正则表达式早字符串方法的使用
    replaceAll(regex,String str);按照正则表达式替换
    split(String regex);//按照正则分割字符串,返回字符数组

    四,Array类

    toString()

    打印数组内容

    sort 对数组进行排序 升序

    sort(arr);

    二分搜索Arrays.binarySearch(arr,55);

    必须数组先排好序,否则出bug
    找到了返回索引,找不到返回-1 -(应该插入的位置)+-1

    使用比较器对象进行自定义排序

    使用比较器对象只支持引用类型的排序,所以使用包装类
    sort(arr,new Comparator) 参数1被排序数组(引用) 参数2匿名内部类对象
    左边数据>右边数据 返回正整数
    左边数据<右边数据 返回负整数
    等于 返回 0

    如果是比较浮点型数据 用Double.compare(a,b);

    二分查找底层

    binarySearch(int[]arr,data){
    //定义左右索引的位置
    int left = 0;
    int right = arr.length-1;
    //开始循环,对半查询
    while(left<=right){
        //取中间的索引值
        int middle = (left+right)/2;
         if(data>arr[middle]){
          //左边位置更新为 中间索引+1
          left = middle+1;
        }else if(data<arr[middle]){
            //右边位置等于中间位置-1
        right = middle-1;
    
        }else{
          return middle;
        }
    }
    retunr -1;//查无此数
    }
    

    五,Lambda表达式

    jdk8开始后的一种新语法格式
    主要就是简化匿名内部类的代码写法

    (匿名内部类被重写方法的形参列表)->{
      被重写方法的方法体代码
    }
    

    必须是接口,而且只能有一个抽象方法
    在接口上面加上@FunctionInterface这个注解.表示只能有一个抽象方法
    简化Comparator

    简化

    lambda表达式的省略写法

    • 参数类型可以不写
    • 如果只有一个参数 ()可以省略

    相关文章

      网友评论

          本文标题:JaveSE进阶(常用API)

          本文链接:https://www.haomeiwen.com/subject/rfoopdtx.html