JavaSE学习心得(API与算法篇)

常用API和常见算法

前言

常用API

Math

System

Runtime

Object

浅克隆

深克隆

Objects

Biginteger

构造方法

成员方法

底层存储方式

Bigdecimal

构造方法

Bigdecimal的使用

底层存储方式

正则表达式

两个判断练习

两个爬取练习

贪婪爬取和非贪婪爬取

正则表达式在字符串方法中的使用

分组

捕获分组

非捕获分组

Date时间类

SimpleDateFormat 类

Calendar概述

常用方法

Zoneld时区

Instant时间戳

ZoneDateTime带时区的时间

DateTimeFormatter用于时间的格式化和解析

LocalDate、LocalTime、LocalDateTime

LocalDate

LocalTime

LocalDateTime

Period

Duration

ChronoUnit

Integer

常见算法

基本查找

二分查找

分块查找

冒泡排序

选择排序

插入排序

递归算法

快速排序

Arrays 

Lambda表达式

经典算法题


前言

接上期文章:JavaSE学习心得(面向对象篇)

教程链接:黑马程序员Java零基础视频教程_上部(Java入门,含斯坦福大学练习题+力扣算法题和大厂java面试题)_哔哩哔哩_bilibili

本期分享常用API与算法部分

常用API

Math

 补充两个

System

 运用:

Runtime

 运用:

 

Object

Object作为顶级父类构造方法只有无参构造

自动重写equals方法,这样比较的就是对象的内容而非地址值,ptg插件重写toString同理

注意:

浅克隆

这种克隆方式使两个对象地址值会完全一样,遇到引用数据类型的成员变量如数组,一个对象修改了里面的内容的话,另一个对象会跟着变。

为了可以用对象调用clone方法这里重写成这样

深克隆

字符串这里不影响,因为修改时会产生新的字符串对象

Object中的clone方法为浅克隆,可以将第三方写的代码导入项目直接使用深克隆方法。

Objects

这个静态的equals方法防止了调用者为空的情况 

Biginteger

构造方法

 

如果BigInteger表示的数字没有超出long的范围,可以用静态方法获取。
如果BigInteger表示的超出long的范围,可以用构造方法获取。

成员方法

运用:

底层存储方式

这个数以经超出了long的范围

Bigdecimal

构造方法

1.如果要表示的数字不大,没有超出double的取值范围,建议使用静态方法

2.如果要表示的数字比较大,超出了double的取值范围,建议使用构造方法

3.如果我们传递的是0~10之间的整数,包含0,包含10,那么方法会返回已经创建好的对象,不会重新new

Bigdecimal的使用

运用:这里前三个用的bd2为2.0

UP:远离零方向舍入
DOWN:向零方向舍入
CEILING:向正无限大方向舍入
FLOOR:向负无限大方向舍入

底层存储方式

数组中每一位和字符串参数一一对应

正则表达式

方法为matches,两个\\相当于一个\

两个判断练习

any-rule这个插件有常用正则表达式,用法和ptg一样直接右键,得到的表达式根据需求进行微调。

两个爬取练习

把下面文本中的电话,邮箱,手机号,热线都爬取出来。

有条件的爬取

贪婪爬取和非贪婪爬取

正则表达式在字符串方法中的使用

运用:

分组

每组是有组号的,也就是序号。
规则1:从1开始,连续不间断。
规则2:以左括号为基准,最左边的是第一组,其次为第二组,以此类推。 

运用:

捕获分组

后续还要继续使用本组的数据。
正则内部使用:\\组号
正则外部使用:$组号

非捕获分组

?:就相当于什么都没加,下面这个表达式就相当于[1-9]\\d{16}(\\d|X|x)

Date时间类

这里是long类型,传递参数要加L

SimpleDateFormat 类

运用:

Calendar概述

Calendar是一个抽象类,不能直接创建对象。

只能这样获取对象

 常用方法

运用:

Zoneld时区

 运用:

Instant时间戳

这些xx就是用来选秒/毫秒/纳秒的

运用:

ZoneDateTime带时区的时间

运用:

 DateTimeFormatter用于时间的格式化和解析

 运用:

LocalDate、LocalTime、LocalDateTime

运用:

LocalDate

 

LocalTime

 

LocalDateTime

Period

用于计算两个“日期”间隔(年、月、日)

Duration

用于计算两个“时间”间隔(秒,纳秒)

ChronoUnit

用于计算两个“日期”间隔

Integer

其他类型同理

常见算法

基本查找

二分查找

分块查找

这些方法都还需要自己写

冒泡排序

先把最大的移动到最右边

选择排序

先把最小的放到最左边

插入排序

直接看例子

递归算法

递归一定要有出口,否则就会出现内存溢出 

快速排序

一定先移动end再移动start

Arrays 

copyOf是从0索引开始,copyOfRange包左不包右

fill不是扩容数组,而是将数组元素全部替换成传入的这个参数

重点讲解最后一个方法:用到了内部类

Lambda表达式

Lambda表达式只能简化函数式接口的匿名内部类的写法
函数式接口:
有且仅有一个抽象方法的接口叫做函数式接口,接口上方可以加@Functionalinterface注解

参数类型可以省略不写。
如果只有一个参数,参数类型可以省略,同时()也可以省略。
如果Lambda表达式的方法体只有一行,大括号,分号,return可以省略不写,需要同时省略。

按大小排序

通过字符串长度排序,短的在前,长的在后,这里o1、o2为String类型

经典算法题

定义数组并存储一些女朋友对象,利用Arrays中的sort方法进行排序

要求1:属性有姓名、年龄、身高。
要求2:按照年龄的大小进行排序,年龄一样,按照身高排序,身高一样按照姓名的字母进行排序。

有一个很有名的数学逻辑题叫做不死神兔问题,有一对兔子,从出生后第三个月起每个月都生一对兔子小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问第十二个月的兔子对数为多少? 

找规律: 每个月对数等于上两个月之和

还有爬楼梯问题也是如此

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值