当前位置: 首页 > article >正文

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

常用APL和常见算法

前言

常用APL

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

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

常用APL

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:按照年龄的大小进行排序,年龄一样,按照身高排序,身高一样按照姓名的字母进行排序。

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

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

还有爬楼梯问题也是如此


http://www.kler.cn/a/421736.html

相关文章:

  • Linux网络编程——进程、线程同步方式
  • C_字符串的一些函数
  • 第七课 Unity编辑器创建的资源优化_UI篇(UGUI)
  • 用三维模型的顶点法向量计算法线贴图
  • 威联通-001 手机相册备份
  • vscode 如何支持点击跳转函数,以C++为例,Python等其它编程语言同理,Visual Studio Code。
  • 机器学习面试八股总结
  • Java学习笔记(10)--面向对象基础
  • Qt桌面应用开发 第十天(综合项目二 翻金币)
  • Spring 邮件发送
  • 基于开源云原生数据仓库 ByConity 体验多种数据分析场景
  • ThingsBoard集成外部工单系统方案
  • 数据仓库的概念
  • Qt 2D绘图之三:绘制文字、路径、图像、复合模式
  • Vue3可以不用Pinia了?
  • es 3期 第12节-选择合适的数据查询方式
  • 【Go底层】time包中Timer定时器原理
  • 【分组去重】.NET开源 ORM 框架 SqlSugar 系列
  • 论文阅读:Generating Synthetic Data for Medical Imaging
  • 企业AI助理在数据分析与决策中扮演的角色
  • B树与B+树的区别,为什么MySQL使用B+树不使用B树
  • Elasticsearch在liunx 中单机部署
  • ElasticSearch QueryDSL详解
  • 通过JS逆向,爬取音乐(仅供学习交流,严禁非法使用)
  • Kubernetes集群添加主机名解析
  • Node.js 实战: 爬取百度新闻并序列化 - 完整教程