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

【java 13天进阶Day04】常用API、正则表达式,泛型、Collection集合API

Math类的使用。

  • Math用于做数学运算。
  • Math类中的方法全部是静态方法,直接用类名调用即可。
  • 方法:
    1. public static int abs(int a) 获取参数a的绝对值
    2. public static double ceil(double a) 向上取整
    3. public static double floor(double a) 向下取整
    4. public static double pow(double a, double b) 获取a的b次幂
    5. public static long round(double a) 四舍五入取整

System系统类

  • System代表当前系统。
  • 静态方法:
    • 1.public static void exit(int status):终止JVM虚拟机,非0是异常终止。
    • 2.public static long currentTimeMillis():获取当前系统此刻时间毫秒值。
    • 3.可以做数组的拷贝。
    • arraycopy(Object var0, int var1, Object var2, int var3, int var4);
      • 使用:参数一:原数组;参数二:从原数组的哪个位置开始赋;参数三:目标数组;参数四:赋值到目标数组的哪个位置;参数五:赋值几个。

BigDecimal大数据类

  • 浮点型运算的时候直接+ * /可能会出现数据失真(精度问题)。
  • BigDecimal以解决浮点型运算数据失真的问题。
  • BigDicimal类:
    • 包:java.math.
    • 创建对象的方式(最好的方式:)public static BigDecimal valueOf(double val) :包装浮点数成为大数据对象。
      • 使用:double a = 0.1;
      • BigDecimal a1 = BigDecimal.valueOf(a);
      • double rs = a1.doubleValue();
    • BigDecimal只是解决精度问题的手段,double数据才是我们的目的
    • 方法声明
      1. public BigDecimal add(BigDecimal value) 加法运算
      2. public BigDecimal subtract(BigDecimal value) 减法运算
      3. public BigDecimal multiply(BigDecimal value) 乘法运算
      4. public BigDecimal divide(BigDecimal value) 除法运算
      5. public double doubleValue():把BigDecimal转换成double类型。

包装类

  • 引入:Java认为一切皆对象。java数据类型中引用数据类型是对象,但是在Java中8种基本数据类型不是对象,只是表示一种数据的类型形式,显得很突兀。Java为了一切皆对象的思想统一,把8种基本数据类型转换成对应的类,这个类称为基本数据类型的包装类。类本身也是对象,成为类对象
    1. byte Byte
    2. short Short
    3. int Integer
    4. long Long
    5. float Float
    6. double Double
    7. char Character
    8. boolean Boolean
  • 自动装箱:可以直接把基本数据类型的值或者变量赋值给包装类。Integer a1 = 12;
  • 自动拆箱:可以把包装类的变量直接赋值给基本数据类型。Integer c = 100; int c1 = c;
  • 包装类的特殊功能
    • 包装类作为类首先拥有了Object类的方法。
    • 包装类作为引用类型的变量可以存储null值。
  • 具体来看特殊功能主要有:
    • 可以把基本数据类型的值转换成字符串类型的值,调用toString()方法。Integer it = 100;
      • 1、调用Integer.toString(基本数据类型的值)得到字符串(没有什么用)。String itStr = it.toString();
      • 2、直接把基本数据类型**+**空字符串就得到了字符串 (推荐使用)。String itStr = it + "";
    • 把字符串类型的数值转换成对应的基本数据类型的值。String numStr = "23";
      • – Xxx.parseXxx(“字符串类型的数值”) (没有什么用) int numInt = Integer.parseInt(numStr);
      • – Xxx.valueOf(“字符串类型的数值”):(推荐使用) int numInt = Integer.valueOf(numStr);

正则表达式

  • 作用:是一些特殊字符组成的校验规则,可以校验信息的正确性,校验邮箱是否合法。
  • 字符类:默认只能校验一个
    • [abc]a、b或c(简单类)
    • [^abc]任何字符,除了a、b或c(否定)
    • [a-zA-Z]a 到 z 或 A 到 Z,两头的字母包括在内(范围)
    • [a-d[m-p]]a到d和m到 p:[a-dm-p](并集)
    • [a-z&&[def23]]d、e 或 f(交集)
    • [a-z&&[^bc]] a 到 z,除了 b 和 c:[ad-z](减去)
    • [a-z&&[^m-p]] a 到 z,而非 m 到 p:[a-lq-z](减去)
  • 预定义字符类:默认只能校验一个
    • .任何字符
    • \d数字:[0-9]
    • \D 非数字: [^0-9]
    • \s空白字符:[\t\n\x0B\f\r]
    • \S非空白字符:[^\s]
    • \w单词字符:[a-zA-Z_0-9]
    • \W非单词字符:[^\w]
  • Greedy 数量词
    • X? ,X一次或一次也没有
    • X*,X零次或多次
    • X+,X一次或多次
    • X{n},X恰好 n
    • X{n,},X至少 n 次
    • X{n,m},X至少 n 次,但是不超过 m 次
  • 使用:"dsd2".matches("[a-zA-Z0-9]{4}") //true
  • 邮箱:email.matches("\\w{1,}@\\w{2,10}(\\.\\w{2,10}){1,2}")
  • 手机号:tel.matches("1[3-9]\\d{9}")
  • 扩展:String str="小李lv434fda324小强87632fad2342423小画";
    • public String[] split(String regex)
      • String[] nameArrs = str.split("\\w+");
    • public String replaceAll(String regex,String newStr)
      • str.replaceAll("\\w+", "/")
  • 字符串遍历
    • String qq="1243542234";
    • for (int i = 0; i < qq.length(); i++) {char ch = qq.charAt(i);}

泛型

  • 泛型就是一个标签:<数据类型>

  • 泛型可以在编译阶段约束只能操作某种数据类型。

  • 注意:JDK 1.7开始之后,泛型后面的申明可以省略不写。

  • 泛型和集合都只能支持引用数据类型,不支持基本数据类型。

  • 泛型的好处:泛型在编译阶段约束了操作的数据类型,从而不会出现类型转换异常。

  • 自定义泛型类

    • class 类名<泛型变量>{}
    • 泛型变量建议使用 E , T , K , V
    • 核心思想:把出现泛型变量的地方全部替换成传输的真实数据类型。
  • 自定义泛型方法

    • 格式:修饰符 <泛型变量> 返回值类型 方法名称(形参列表){}
    • 注意:方法定义了是什么泛型变量,后面就只能用什么泛型变量。
    • 泛型类的核心思想:是把出现泛型变量的地方全部替换成传输的真实数据类型。
    • public static <T> String arrToString(T[] nums) {StringBuilder sb = new StringBuilder();sb.append("[");if (nums != null && nums.length > 0) {for (int i = 0; i < nums.length; i++) {T ele = nums[i];sb.append(i == nums.length - 1 ? ele : ele + ", ");}}sb.append("]");return sb.toString();
      }
      
  • 自定义泛型接口

    • 格式: interface 接口名称<泛型变量>{}
    • 泛型接口的核心思想,在实现接口的时候传入真实的数据类型,样重写的方法就是对该数据类型进行操作。
  • 泛型通配符?

    • ?可以用在使用泛型的时候代表一切类型。public static void run(ArrayList<?> cars) {}
    • ? extends Car :那么**?必须是Car**或者其子类。(泛型的上限) public static void run(ArrayList<? extends Car> cars) {}
    • ? super Car :那么**?必须是Car**或者其父类。(泛型的下限。不是很常见)
    • E , T , K , V是在定义泛型的时候使用代表一切类型。

数组和集合

  • 数组

    • 1、Java语言中的数组是一种引用数据类型;不属于基本数据类型。
    • 2、数组当中既可以存储“基本数据类型”的数据,也可以存储“引用数据类型”的数据(数组既可以存储基本数据类型,又可以存储引用数据类型,基本数据类型存储的是值,引用数据类型存储的是内存地址值)。
    • 3、数组是有对应的类,这个类是在JVM运行时创建的,所以没有对应的class 文件;(通过数组创建语法 int[] a = {1, 100, 10, 20}; 可看出,无法查看 数组类,以及源码);数组的父类是Object。
    • 4、数组一旦创建,在java中规定,长度不可变。
    • 5、java中的数组要求数组中元素的类型统一。比如int类型数组只能存储int类型,自定义Person类型数组只能存储Person类型。
    • 6、数组在内存方面存储的时候,内存地址连续。 这是数组存储元素的特点。数组实际上是一种简单的数据结构。
    • 7、所有的数组都是拿“第一个小方框的内存地址”作为整个数组对象的内存地址。 (数组中首元素的内存地址作为整个数组对象的内存地址。)
    • 8、数组中每一个元素都是有下标的,下标从0开始,以1递增。最后一个元素的下标是:length - 1 下标非常重要,因为我们对数组中元素进行“存取”的时候,都需要通过下标来进行。
  • 集合的由来:数组长度是固定的,当添加的元素超过了数组的长度时需要对数组重新定义, 这样太过繁琐。因此,Java内部给我们提供了集合类,能存储任意对象,长度是可以改变的,随着元素的增加而增加,随着元素的减少而减少。

  • 区别
    1、数组既可以存储基本数据类型,又可以存储引用数据类型(基本数据类型存储的是值, 引用数据类型存储的是地址值),集合只能存储引用数据类型(对象), 集合中也可以存储基本数据类型,但是在存储的时候会自动装箱(JDK1.5新特性)变成对象。
    2、数组的长度是固定的,集合长度是可以改变的。
    3、定义数组时必须指定数组元素类型,集合默认其中所有元素都是Object。
    4、无法直接获取数组实际存储的元素个数,数组使用length获取数组的长度,但集合可以通过size()直接获取集合实际存储的元素个数。
    5、集合有多种实现方式和不同的适用场合,如List,Set,Map等;而不像数组仅采用分配连续的空间方式。
    6、集合以接口和类的形式存在,具有封装,继承和多态等类的特性,通过简单的方法和属性调用即可实现各种复杂的操作,大大提高软件的开发效率。


集合

  • 集合是一个大小可变的容器。
  • 容器中的每个数据称为一个元素。数据==元素。
  • 集合的特点是:类型可以不确定,大小不固定。集合有很多种,不同的集合特点和使用场景不同。
  • 数组:类型和长度一旦定义出来就都固定了。
  • 集合的作用:
    • 在开发中,很多时候元素的个数是不确定的。
    • 而且经常要进行元素的增删该查操作,集合都是非常合适的。
  • Java中集合的代表是:Collection,它是Java中集合的祖宗类。
  • Collection集合的体系:
    • Collection(接口)
      1. Set(接口)
        • HashSet****(实现类)
          • LinkedHashSet<>(实现类)
        • TreeSet<>(实现类)
      2. List****(接口)
        • ArrayList****(实现类)
        • LinekdList<>(实现类)
        • Vector<>(实现类)
  • 集合的特点:
    • Set系列集合:添加的元素是无序,不重复,无索引的。
      • – HashSet:同父类Set一致。
        • LinkedHashSet:添加的元素是有序,不重复,无索引的。
      • – TreeSet:不重复,无索引,按照大小默认升序排序
    • List系列集合:添加的元素是有序,可重复,有索引。
      • – ArrayList:同父类List一致。
      • – LinekdList:同父类List一致。
      • –Vector:是线程安全的,速度慢,工作中很少使用。
  • Collection集合的常用API
    • public boolean add(E e):把给定的对象添加到当前集合中 。
    • public void clear() :清空集合中所有的元素。
    • public boolean remove(E e):把给定的对象在当前集合中删除。
    • public boolean contains(Object obj):判断当前集合中是否包含给定的对象。
    • public boolean isEmpty():判断当前集合是否为空。
    • public int size(): 返回集合中元素的个数。
    • public Object[] toArray(): 把集合中的元素,存储到数组中。
  • Collection集合的遍历方式
    • 迭代器
      • public Iterator iterator():获取集合对应的迭代器,用来遍历集合中的元素的。 Iterator<String> it = lists.iterator();
      • E next():获取下一个元素值。
      • boolean hasNext():判断是否有下一个元素,有返回true ,反之。while (it.hasNext()) { System.out.println(it.next());}
    • foreach(增强for循环)
    • JDK 1.8开始之后的新技术Lambda表达式
      • lists.forEach(s -> {System.out.println(s);});
      • lists.forEach(s -> System.out.println(s));
      • lists.forEach(System.out::println);

ps:b站课程《黑马程序员Java13天进阶》根据官方笔记结合自身情况整理的笔记
视频链接

相关文章:

【java 13天进阶Day04】常用API、正则表达式,泛型、Collection集合API

Math类的使用。 Math用于做数学运算。Math类中的方法全部是静态方法&#xff0c;直接用类名调用即可。方法&#xff1a; public static int abs(int a) 获取参数a的绝对值public static double ceil(double a) 向上取整public static double floor(double a) 向下取整public s…...

conversation_template | conversation_actors | conversation_line_template

目录 conversation_template conversation_actors conversation_line_template 实例应用 conversation_template id&#xff1a;某段谈话的唯一编号FirstLineId&#xff1a;谈话开始的第一段话的编号&#xff0c;取值来源 ConversationLine.db2 的 ID 字段TextureKitId&am…...

架构图--架构师的行军地图

架构图是架构师最重要的沟通和规划工具之一&#xff0c;它如同行军地图般指导着整个软件系统的构建与演进。本文系统性地探讨了软件架构图设计的全面方法论&#xff0c;提出横向与纵向双维度的设计框架。横向设计关注模块间的业务、数据与重要性关系&#xff0c;纵向设计则采用…...

`get_peft_model` 是 `peft` 库什么方法

get_peft_model 是 peft 库什么方法 get_peft_model 是 peft 库中一个关键的方法,其作用是将 LoRA 配置应用到预训练模型上,使得模型能够使用 LoRA 技术进行高效微调。 整体逻辑概述 get_peft_model 方法的核心任务是遍历预训练模型的各个模块,识别出需要应用 LoRA 的目标…...

OpenHarmony-Risc-V上运行openBLAS中的benchmark

OpenHarmony-Risc-V上运行openBLAS中的benchmark 文章目录 OpenHarmony-Risc-V上运行openBLAS中的benchmark前言一、编译openBLAS1.源码下载2.工具链下载3.编译并安装openBLAS 二、编译open BLAS中的benchmark三、上设备运行总结 前言 参考https://zhuanlan.zhihu.com/p/18825…...

HAL库通过FATFS和SDIO+DMA写入SD卡数据错误

HAL库F4版本 1.28.1 最近在使用HAL库配置SDIODMA并通过FATFS向SD卡写入数据&#xff0c;但是发现写入的数据经常有错误&#xff0c;不是少了一部分就是多了一部分&#xff0c;写入的数据为csv格式&#xff0c;通过循环向缓冲区写入"100100,12.345678\r\n"数据来观察问…...

深入解析 Python 中的装饰器 —— 从基础到实战

1. 装饰器基础 1.1 什么是装饰器&#xff1f; 装饰器本质上是一个 Python 函数&#xff0c;它可以让其他函数在不需要做任何代码变动的前提下增加额外功能。装饰器的返回值也是一个函数对象。 1.2 语法糖&#xff1a; 符号 Python 提供了 符号作为装饰器的语法糖&#xff0c…...

【Java并发】Java并发编程之CountDownLatch详解:原理、使用场景与代码实战

摘要 在Java多线程编程中&#xff0c;CountDownLatch 是一个强大的同步工具类&#xff0c;用于协调多个线程的执行顺序&#xff0c;线程间的同步是一个常见的需求。CountDownLatch 作为 java.util.concurrent 包中的一个同步辅助类&#xff0c;提供了一种简单而有效的方式来实…...

python-图片分割

图片分割是图像处理中的一个重要任务&#xff0c;它的目标是将图像划分为多个区域或者对象&#xff0c;例如分割出物体、前景背景或特定的部分。在 Python 中&#xff0c;常用的图片分割方法包括传统的图像处理技术&#xff08;例如阈值分割、区域生长等&#xff09;和深度学习…...

江湖路远,唯PUT可稳:Express 路由更新招式全解

前言 江湖传闻,后端开发如同修炼绝世武功:有人精通 POST 掌,横扫千军;有人修习 GET 指法,探查万象。而真正踏入高阶境界的高手,常常默默修炼一门冷门却威力极强的秘技,PUT 神功。 今日时机正好,你我相逢于码海江湖,不如来一场技术切磋,也许能悟出更新之道,功力再上…...

MySQL:Join连接的原理

连接查询的执行过程&#xff1a; 确定第一个需要查询的表【驱动表】 选取代价最小的访问方法去执行单表查询语句 从驱动表每获取到一条记录&#xff0c;都需要到t2表中查找匹配的记录 两表连接查询需要查询一次t1表&#xff0c;两次t2表&#xff0c;在两表的连接查询中&…...

2025.04.14【Table】| 生信数据表图技巧

Custom title A set of examples showing how to customize the titles of a table made with GT Custom footer How to customize the footer and the references section of a gt table 文章目录 Custom titleCustom footer 生信数据可视化&#xff1a;Table图表详解1. R语…...

方案解读:虚拟电厂标杆项目整体建设方案【附全文阅读】

在电力市场背景下,传统电力现货市场存在电能定价不合理、分布式电源并网困难等问题。本虚拟电厂标杆项目旨在研究全时间尺度虚拟电厂智能管控关键技术,通过研制虚拟电厂控制器样机、开发运行管理平台,实现对分布式能源的合理优化配置。项目内容涵盖虚拟调控、建设目标、建设…...

使用Trae CN分析项目架构

架构分析后的截图 A区是打开的项目、B区是源码区、C区是AI给出当前项目的架构分析结果。 如何用 Trae CN 快速学习 STM32 嵌入式项目架构 在嵌入式开发领域&#xff0c;快速理解现有项目的架构是一项关键技能。Trae CN 作为一款强大的分析工具&#xff0c;能帮助开发者高效剖…...

【Python3】Django 学习之路

第一章&#xff1a;Django 简介 1.1 什么是 Django&#xff1f; Django 是一个高级的 Python Web 框架&#xff0c;旨在让 Web 开发变得更加快速和简便。它鼓励遵循“不要重复自己”&#xff08;DRY&#xff0c;Don’t Repeat Yourself&#xff09;的原则&#xff0c;并提供了…...

浏览器缩放后 element ui组件偏移

一、需求&#xff1a;当body的有了zoom值之后&#xff0c;element ui相关的popper弹框&#xff08;下拉框、日期选择框、分页组件&#xff09;位置都会出现偏移问题 二、问题来源 popper弹框都会需要根据屏幕x,y的坐标来设置位置&#xff0c;但是有了zoom值之后&#xff0c;x,y…...

FPGA学习——DE2-115开发板上设计波形发生器

1. 实验目的 掌握直接数字频率合成&#xff08;DDS&#xff09;技术的基本原理和应用。使用DE2-115开发板实现正弦波和方波的生成。使用SignalTap II嵌入式逻辑分析仪测试输出波形的离散数据。 2. 实验原理 DDS技术&#xff1a;通过相位累加器生成相位信息&#xff0c;结合波…...

Next.js 技术详解:构建现代化 Web 应用的全栈框架

1. Next.js 概述 Next.js 是一个基于 React 的全栈框架&#xff0c;由 Vercel 团队开发和维护。它提供了一系列开箱即用的功能&#xff0c;使开发者能够快速构建高性能的 Web 应用。 核心优势 服务端渲染 (SSR)静态站点生成 (SSG)增量静态再生成 (ISR)文件系统路由API 路由图…...

【springsecurity oauth2授权中心】简单案例跑通流程

项目被拆分开&#xff0c;需要一个授权中心使得每个项目都去授权中心登录获取用户权限。而单一项目里权限使用的是spring-security来控制的&#xff0c;每个controller方法上都有 PreAuthorize("hasAuthority(hello)") 注解来控制权限&#xff0c;想以最小的改动来实…...

golang channel源码

解析 数据结构 hchan&#xff1a;channel 数据结构 qcount&#xff1a;当前 channel 中存在多少个元素&#xff1b; dataqsize: 当前 channel 能存放的元素容量&#xff1b; buf&#xff1a;channel 中用于存放元素的环形缓冲区&#xff1b; elemsize&#xff1a;channel 元素…...

小刚说C语言刷题——1033 判断奇偶数

1.题目描述 输入一个整数&#xff0c;判断是否为偶数。是输出 y e s &#xff0c;否则输出n o。 输入 输入只有一行&#xff0c;包括 1个整数&#xff08;该整数在 1∼10000的范围内&#xff09;。 输出 输出只有一行。&#xff08;注意输出格式&#xff0c;具体请看下方提…...

2025TGCTF Web WP复现

AAA 偷渡阴平 <?php$tgctf2025$_GET[tgctf2025];if(!preg_match("/0|1|[3-9]|\~|\|\|\#|\\$|\%|\^|\&|\*|\&#xff08;|\&#xff09;|\-|\|\|\{|\[|\]|\}|\:|\|\"|\,|\<|\.|\>|\/|\?|\\\\/i", $tgctf2025)){//hint&#xff1a;你可以对着键盘…...

基于DeepSeek的考研暑假日志分析

注&#xff1a;我去年考研时写了日志&#xff0c;大致记录了我每天的主要活动。由于过于琐碎&#xff0c;一直没有翻看。突发奇想&#xff0c;现在利用deepseek总结其中规律。 从你的日志中可以总结出以下规律和活动兴衰起落&#xff1a; ​​一、学习活动规律与演变​​ ​​…...

「GitHub热榜」AIGC系统源码:AI问答+绘画+PPT+音乐生成一站式

—零门槛搭建私有化AI内容工厂&#xff0c;源码开放商业落地指南 为什么全栈AIGC系统成为企业刚需&#xff1f; 1. 传统方案的致命缺陷 痛点 使用ChatGPTMidjourneyCanva 本全栈方案 工具割裂 需切换5平台 一个系统全搞定 成本 年费50万 一次部署永久免费 数据安全 …...

AWS上构建基于自然语言的数值和符号计算系统

我想要实现一个通过使用C#、Semantic Kernel库、OpenAI GPT 4的API和以下使用C#开源库MathNet实现通过中文自然语言提示词中包含LATEX代码输入到系统,通过以下符号和数值计算和其它符号和数值计算程序输出计算结果和必要步骤的应用,这样的数学计算使用程序直接产生结果,可以…...

【C++】 —— 笔试刷题day_19

一、小易的升级之路 题目解析 小易现在要打游戏&#xff0c;现在游戏角色的初始能力值为a&#xff0c;我们会遇到n个怪&#xff0c;这些怪物的防御值为b1、b2、b3...&#xff0c;如果我们的能力值要高于或者等于怪物的防御值&#xff0c;那我们的能力值就会加bi&#xff1b;如…...

解决 Spring Boot 多数据源环境下事务管理器冲突问题(非Neo4j请求标记了 @Transactional 尝试启动Neo4j的事务管理器)

0. 写在前面 到底遇到了什么问题&#xff1f; 简洁版&#xff1a; 在 Oracle 与 Neo4j 共存的多数据源项目中&#xff0c;一个仅涉及 Oracle 操作的请求&#xff0c;却因为 Neo4j 连接失败而报错。根本原因是 Spring 的默认事务管理器错误地指向了 Neo4j&#xff0c;导致不相…...

Oracle日志系统之重做日志和归档日志

Oracle日志系统之重做日志和归档日志 重做日志归档日志 本文讨论Oracle日志系统中对数据恢复非常重要的两个日志&#xff1a;重做日志和归档日志。 重做日志 重做日志&#xff0c;英文名Redo Log&#xff0c;顾名思义&#xff0c;是用来数据重做的&#xff0c;主要使用场景是事…...

Kubernetes》》K8S》》Pod的健康检查

K8s概念总结 》》》Pod的生命周期阶段 Pod的生命周期可以简单描述&#xff1a;首先Pod被创建&#xff0c;紧接着Pod被调度到Node节点进行部署。 Pod是非常忠诚的&#xff0c;一旦被分配到Node节点后&#xff0c;就不会离开这个Node节点&#xff0c;直到它被删除&#xff0c;删除…...

计算机视觉——基于使用 OpenCV 与 Python 实现相机标定畸变校正

概述 相机标定是一种旨在通过确定相机的内参&#xff08;焦距、光学中心、畸变系数&#xff09;和外参&#xff08;相机的位置和方向&#xff09;&#xff0c;提高图像在现实世界中的几何精度的过程。该过程可以纠正相机拍摄的图像中的畸变&#xff0c;使相机能够准确感知现实…...