【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天进阶》根据官方笔记结合自身情况整理的笔记
视频链接

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/79592.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何系统地入门学习stm32?

如何系统地入门学习stm32&#xff1f; 作为一个在嵌入式领域摸爬滚打十余年的工程师&#xff0c;看到这个问题&#xff0c;我不禁想起自己当年啃着厚重的数据手册&#xff0c;对着一块蓝色的PCB板冥思苦想的日子。STM32的学习之路&#xff0c;说难不算特别难&#xff0c;说简单…

考公:数字推理

文章目录 1.真题12 312 530 756 ()-3 3 1 12 17 ()356 342 333 324 ()30 28 27 25 () 2215105 1494 1383 1272 ()2 3 8 21 46 ()4/25 1/4 4/9 1 ()39 416 630 848 ()5 8 11 17 () 10714 21 40 77 () 229 2.数字推理方法2.1 差值法2.2 比值法&#xff08;乘法关系&#xff09;2.…

自动化测试相关协议深度剖析及A2A、MCP协议自动化测试应用展望

一、不同协议底层逻辑关联分析 1. OPENAPI协议 OPENAPI 协议核心在于定义 API 的规范结构&#xff0c;它使用 YAML 或 JSON 格式来描述 API 的端点、请求参数、响应格式等信息。其底层逻辑是构建一个清晰、标准化的 API 描述文档&#xff0c;方便不同的客户端和服务端进行对接…

2025.04.17【Dendrogram】生信数据可视化:Dendrogram图表详解

Dendrogram customization Go further with ggraph: edge style, general layout, node features, adding labels, and more. Customized circular dendrogram Learn how to build a circular dendrogram with proper labels. 文章目录 Dendrogram customizationCustomized c…

SRS流媒体服务器

SRS流媒体服务器简介 SRS(Simple RTMP Server)是一个开源的流媒体服务器&#xff0c;主要用于直播和WebRTC场景。以下是关于SRS的关键信息&#xff1a; 主要特性 支持多种协议&#xff1a;RTMP、HTTP-FLV、HLS、WebRTC、SRT等低延迟&#xff1a;特别优化了WebRTC和HTTP-FLV的…

R语言之环境清理

有时候 R 环境中残留的变量可能会导致警告&#xff0c;可以尝试清理工作空间并重新加载数据。 警告信息: In mget(objectNames, envir ns, inherits TRUE) : 重新评估被中断的许诺 # 观察前6行 head(iris)# 观察数据结构 str(iris)# 探知数据的极值和分位数&#xff0c;以及…

RAG工程-基于LangChain 实现 Naive RAG

摘要 本篇文章以实现简单的第一范式 RAG-Naive RAG为目标&#xff0c;并最终创建并实现一个基于RAG的论文分析器的项目。 LangChain 文档加载 文档加载是 RAG 流程的起点&#xff0c;它负责从各种数据源读取原始文档&#xff0c;将其转化为程序可处理的格式。LangChain 支持多…

Rust网络编程实战:全面掌握reqwest库的高级用法

一、开篇导引 1.1 对比Python Requests解释为何reqwest是Rust生态的标杆HTTP客户端 在Python生态中&#xff0c;Requests 库以其简洁易用的API成为了HTTP客户端的首选。它使得开发者能够轻松地发送各种HTTP请求&#xff0c;处理响应&#xff0c;而无需过多关注底层细节。然而…

k8s中sidecar死循环

序言 怎么发现我的同事们很上进呢&#xff0c;估计做了下贱的事儿吧。 伤不到我&#xff0c;不代表不疼&#xff01; sidecar产生的问题 1 背景 在k8s的环境中&#xff0c;pod的使用越来越多了&#xff0c;也就产生了sidecar容器&#xff0c;在现在的环境中&#xff0c;一个pod…

Day53 二叉树的层序遍历

给你二叉树的根节点 root &#xff0c;返回其节点值的 层序遍历 。 &#xff08;即逐层地&#xff0c;从左到右访问所有节点&#xff09;。 /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* T…

C盘清理技巧分享

一、系统级深度清理 1. 存储感知自动化 路径:设置 → 系统 → 存储 → 开启「存储感知」配置策略: 临时文件:每 1-2 周自动清理回收站:超过 30 天自动清空应用缓存:按需求设置清理频率进阶操作:在「高级存储设置」中关闭「传递优化」(减少更新缓存占用)2. 磁盘清理工具…

面试题--随机(一)

MySQL事务中的ACID特性&#xff1f; A 原子性 事务是一组SQL语句&#xff0c;不可分割 C 一致性 事务中的SQL语句要么同时执行&#xff0c;即全部执行成功&#xff0c;要么全部不执行&#xff0c;即执行失败 I 隔离性 MySQL中的各个事务通过不同的事务隔离等级&#xff0c;产生…

Spring Boot资源耗尽问题排查与优化

Spring Boot服务运行一段时间后新请求无法处理的问题。服务没有挂掉&#xff0c;也没有异常日志。思考可能是一些资源耗尽或阻塞的问题。 思考分析 首先&#xff0c;资源耗尽可能涉及线程池、数据库连接、内存、文件句柄或网络连接等。常见的如线程池配置不当&#xff0c;导致…

Map和Set相关练习

目录 1、只出现一次的数字 2、宝石与石头 3、坏键盘打字 4、复制带随机指针的链表 5、大量数据去重 6、大量数据重复次数 7、前K个高频单词 1、只出现一次的数字 oj&#xff1a;136. 只出现一次的数字 - 力扣&#xff08;LeetCode&#xff09; 思路&#xff1a; 1. 使用…

day45——非递减数列(LeetCode-665)

题目描述 给你一个长度为 n 的整数数组 nums &#xff0c;请你判断在 最多 改变 1 个元素的情况下&#xff0c;该数组能否变成一个非递减数列。 我们是这样定义一个非递减数列的&#xff1a; 对于数组中任意的 i (0 < i < n-2)&#xff0c;总满足 nums[i] < nums[i …

OOM 未触发 JVM 崩溃的可能原因

1. OOM 未触发 JVM 崩溃的可能原因‌ (1) 未配置 JVM 参数强制崩溃‌ 关键参数缺失‌&#xff1a; 若未添加 -XX:CrashOnOutOfMemoryError&#xff0c;JVM 在 OOM 时可能仅抛出异常并正常退出&#xff0c;而非崩溃&#xff0c;因此不会生成 hs_err_pid.log。 # 正确配置示例&…

Axios 介绍及使用指南

本文将基于 Axios 原理&#xff0c;安装及封装方面展开描述&#xff0c;话不多说&#xff0c;现在发车&#xff01; 一、原理 Axios 中文文档&#xff1a;起步 | Axios中文文档 | Axios中文网 赛前科普&#xff1a; 下文将涉及到三个关键词&#xff1a;Axios&#xff0c;Ajax…

C#插件与可扩展性

外接程序为主机应用程序提供了扩展功能或服务。.net framework提供了一个编程模型,开发人员可以使用该模型来开发加载项并在其主机应用程序中激活它们。该模型通过在主机和外接程序之间构建通信管道来实现此目的。该模型是使用: System.AddIn, System.AddIn.Hosting, System.…

Melos 发布pub.dev

确保登录 置登录状态 按照提示操作&#xff0c;先运行&#xff1a; bash dart pub logout 这会清除当前的&#xff08;损坏的&#xff09;登录信息。 然后再重新登录&#xff1a; bash dart pub login 这一次它应该会在浏览器中打开 Google 登录页面&#xff0c;完成登…

4.黑马学习笔记-SpringMVC(P43-P47)

1.SpringMVC简介 SpringMVC技术&#xff08;更少的代码&#xff0c;简便&#xff09;与servlet技术功能相同&#xff0c;属于web层开发技术。 SpringMVC是一种基于java实现MVC模型的轻量级web框架。 轻量级指的是&#xff08;内存占用比较低&#xff0c;运行效率高&#xff09;…