超详细的JAVA高级进阶基础知识04
目录
4. 面向对象高级 - 常用的API
4.1 Arrays 工具类
4.1.1 Arrays 类介绍
4.2 冒泡排序
4.3 选择排序
4.4 二分查找
4.5 正则表达式
4.5.1 String 类中与正则有关的常见方法
4.5.2 练习
4.5.3 今日学习目标
4. 面向对象高级 - 常用的API
4.1 Arrays 工具类
4.1.1 Arrays 类介绍
public static int binarySearch (int[] a, int key) :
查找元素在数组中的索引 (二分查找法: 保证数组的元素是排好序的)
- 如果查找的元素, 在数组中不存在: 返回 (-(插入点) - 1)
public class ArraysDemo {public static void main(String[] args) {int[] arr1 = {11, 22, 33, 44, 55};int[] arr2 = {11, 22, 33, 44, 66};// 将数组元素拼接为带有格式的字符串System.out.println(Arrays.toString(arr1));// 比较两个数组内容是否相同System.out.println(Arrays.equals(arr1, arr2));// 查找元素在数组中的索引System.out.println(Arrays.binarySearch(arr1, 33));System.out.println(Arrays.binarySearch(arr1, 66));int[] nums = {22, 11, 55, 44, 33};System.out.println(Arrays.binarySearch(nums, 11)); // 1Arrays.sort(nums);System.out.println(Arrays.binarySearch(nums, 11)); // 0// 对数组进行默认升序排序Arrays.sort(nums);System.out.println(Arrays.toString(nums));}
}
4.2 冒泡排序
相邻的两个数进行比较, 如果第一个比第二个大, 就交换他们两个。“每轮”中最大的数值在“最后”。
以数组{22, 55 , 44 , 33 , 11}为例
第一轮比较 :
arr[0]-arr[1] arr[1]-arr[2] arr[2]-arr[3] arr[3]-arr[4] 比较4次
以此类推得:
![]()
冒泡排序代码实现如下:
public class BubbleSort {/*冒泡排序: 相邻的两个数进行比较, 如果第一个比第二个大, 就交换他们两个第一轮 : arr[0]-arr[1] arr[1]-arr[2] arr[2]-arr[3] arr[3]-arr[4] 比较4次第二轮 : arr[0]-arr[1] arr[1]-arr[2] arr[2]-arr[3] 比较3次第三轮 : arr[0]-arr[1] arr[1]-arr[2] 比较2次第四轮 : arr[0]-arr[1] 比较1次*/public static void main(String[] args) {int[] arr = {22, 55, 44, 33, 11};// 外循环: 比较的轮数for (int i = 0; i < arr.length - 1; i++) {// 内循环: 比较的次数// -1: 避免索引越界// -i: 提升效率for (int j = 0; j < arr.length - 1 - i; j++) {if (arr[j] > arr[j + 1]) {int temp = arr[j];arr[j] = arr[j + 1];arr[j + 1] = temp;}}}System.out.println(Arrays.toString(arr));}
}
4.3 选择排序
从 0 索引开始,拿着每一个索引上的元素跟后面的元素依次比较。“每轮”把最小的数值放在“最前面”。
第一轮比较 :
arr[0]-arr[1] arr[0]-arr[2] arr[0]-arr[3] arr[0]-arr[4]
以此类推得:
选择排序代码实现如下
public class SelectSort {/*选择排序: 从 0 索引开始,拿着每一个索引上的元素跟后面的元素依次比较第一轮 : arr[0]-arr[1] arr[0]-arr[2] arr[0]-arr[3] arr[0]-arr[4]第二轮 : arr[1]-arr[2] arr[1]-arr[3] arr[1]-arr[4]第三轮 : arr[2]-arr[3] arr[2]-arr[4]第四轮 : arr[3]-arr[4]*/public static void main(String[] args) {int[] arr = {22, 11, 44, 33, 55};for (int i = 0; i < arr.length - 1; i++) {for (int j = i+1; j < arr.length; j++) {if(arr[i] > arr[j]){int temp = arr[i];arr[i] = arr[j];arr[j] = temp;}}}System.out.println(Arrays.toString(arr));}
}
4.4 二分查找
借助“指针”对有序的数组进行查找元素。
折半查找代码实现如下:
public class BinarySearch {/*二分查找 (折半查找) :前提: 数组元素必须是排好序的思路:1. 定义两个变量记录最小索引, 和最大索引2. 折半的动作不止一次, 应该使用循环条件 while(min <= max)3. 循环中计算出中间索引4. 加入判断元素如果大于中间元素 : min = mid + 1;元素如果小于中间元素 : max = mid – 1;元素如果等于中间元素 : 将索引返回 (mid)*/public static void main(String[] args) {int[] arr = {11, 22, 33, 44, 55, 66, 77, 88, 99};int index = binarySearch(arr, 100);System.out.println(index);}private static int binarySearch(int[] arr, int num) {// 1. 定义两个变量记录最小索引, 和最大索引int min = 0;int max = arr.length - 1;int mid;// 2. 折半的动作不止一次, 应该使用循环while (min <= max) {// 3. 计算中间索引mid = (min + max) / 2;// 4. 比对if (num > arr[mid]) {min = mid + 1;} else if (num < arr[mid]) {max = mid - 1;} else {return mid;}}// 5. 没找到, 返回-1return -1;}}
4.5 正则表达式
用于校验数据格式
了解即可、无需记住,(因为将来百度搜索即可)
4.5.1 String 类中与正则有关的常见方法
4.5.2 练习
具体代码实现如下:
public class RegexTest {public static void main(String[] args) {String qqRegex = "[1-9]\\d{4,11}";System.out.println("01256".matches(qqRegex));String telRegex = "[1][3-9]\\d{9}";System.out.println("15611111111".matches(telRegex));System.out.println("-----------------");String emailRegex = "\\w+[@][\\w&&[^_]]+(\\.[a-z]{2,3})+";System.out.println("zhangSan@itcast.cn".matches(emailRegex));System.out.println("zhangsan@itcast.qq.com".matches(emailRegex));System.out.println("zhangSanitcast.cn".matches(emailRegex));System.out.println("zhangSan@itcast".matches(emailRegex));}
}
具体代码是实现如下:
public class PatternTest {/*需求:请把下面文本中的电话,邮箱,座机号码,热线都爬取出来。*/public static void main(String[] args) {String data = "来黑马程序员学习Java," +"电话:18666668888,18699997777或者联系" +"邮箱:boniu@itcast.cn 邮箱:bozai@itcast.cn 邮箱2:dlei0009@163.com" +"座机电话:01036517895,010-98951256 " +"热线电话:400-618-9090 ,400-618-4000,4006184000,4006189090";String regex = "[1][3-9]\\d{9}|\\w+[@][\\w&&[^_]]+(\\.[a-z]{2,3})+|[0]\\d{2,3}-?\\d{7,8}|400-?\\d{3}-?\\d{4}";// 1. 将正则表达式封装为 Pattern 对象Pattern pattern = Pattern.compile(regex);// 2. 获取匹配器对象Matcher matcher = pattern.matcher(data);while (matcher.find()) {System.out.println(matcher.group());}}
}
4.5.3 今日学习目标
相关文章:

超详细的JAVA高级进阶基础知识04
目录 4. 面向对象高级 - 常用的API 4.1 Arrays 工具类 4.1.1 Arrays 类介绍 4.2 冒泡排序 4.3 选择排序 4.4 二分查找 4.5 正则表达式 4.5.1 String 类中与正则有关的常见方法 4.5.2 练习 4.5.3 今日学习目标 4. 面向对象高级 - 常用的API 4.1 Arrays 工具类 4.1.1…...
Python 运算符?
什么是运算符? 本章节主要说明Python的运算符。举个简单的例子 4 5 9 。 例子中,4 和 5 被称为操作数, 称为运算符。 Python语言支持以下类型的运算符: 算术运算符 比较(关系)运算符 赋值运算符 逻辑运算符 位运算符…...
linux nuxt 部署 问题汇总
安装node centos 7 请选择 node版本 v16.1.0 进行安装, npm 版本 7.11.2 亲测这个版本有效,否则会出现 Error: Cannot find module ‘node:fs/promises‘ 等问题 node安装亲参照: Linux node 安装教程_linux node安装_围城少年的博客…...

C++内存管理
文章目录1. c的内存管理例题2.c管理方式1.c的内置类型1.申请一个空间并初始化2.申请连续的空间并初始化3.总结2.c的自定义类型2.总结3.operator new与operator delete函数4.new和delete的实现原理1.内置类型2.自定义类型内存泄露问题&&delete先析构的原因编译器实现机制…...
电子招投标系统源码之 —采购数字化转型快人一步,以大数据支撑供应链管理未来
采购数字化转型快人一步,以大数据支撑供应链管理未来 招标采购为主的一站式全流程数字化采供协同。平台满足询比价、招标、竞价、拍卖、协议直采、商城采购等多种采购定价方式,采购过程全程留痕可追溯。平台支持企业通过WEB、APP、小程序等终端完成采购需…...
ie获取cookie数据,中文乱码;cookie中文乱码终极解决办法
终极解决办法 cookie存中文数据是会出现乱码的,所以在存数据前,得先“编码”,取的时候先“解码” JS方法-编码:encodeURI("你好") 结果:"%E4%BD%A0%E5%A5%BD"JS方法-解码:decodeURI(&…...
day16_关键字this和super丶就近原则和追根溯源原则
this关键字 含义:this代表当前对象 this使用位置 this在实例初始化相关的代码块和构造器中:表示正在创建的那个实例对象,即正在new谁,this就代表谁this在非静态实例方法中:表示调用该方法的对象,即谁在调…...
MySQL 共享锁 (lock in share mode),排他锁 (for update)
共享锁 (lock in share mode) 简介 允许不同事务之间加共享锁读取,但不允许其它事务修改或者加入排他锁 如果有修改必须等待一个事务提交完成,才可以执行,容易出现死锁 共享锁事务之间的读取 session1: start transaction; select * from…...

类与对象(下)
文章目录类与对象(下)1. 再谈构造函数1.1 构造函数体赋值1.2 初始化列表特点推荐坑1.3 explicit关键字2. static成员2.1 概念面试题解法1解法2解法3(重要)2.2 特性问题3. 友元3.1 友元函数说明3.2 友元类4. 内部类4.14.25. 匿名对象6.拷贝对象时的一些编译器优化总结类与对象(下…...

feign技巧 - form方式传值
feign技巧 - form方式传值。 0. 文章目录1. 前言2. 调用样例3. 原理解析3.1 feign端序列化参数3.2 SpringMVC服务端解析参数3.3 补充 - 继承关系不会被传递的原因3.4 补充 - 不能使用GET。4. 总结1. 前言 直接正题。 如何使用feign进行fom表单方式的请求调用,以及其…...

MATLAB | 情人节来绘制更立体的玫瑰花吧
又是一年情人节,今年带来一款更有立体感的玫瑰: 曲面的函数表达式来自: http://www.bugman123.com/Math/index.html 这个网站,上面还有很多其他帅气的玩意。 基础绘制 xlinspace(0,1,300); thetalinspace(-2*pi,15*pi,300); [x,theta]meshg…...

【Python表白代码】 2.14“Valentine‘s Day”“没别的意思 就是借着特殊日子说声喜欢你”你在哪儿?我去见你~(各种玫瑰源码合集)
导语 Valentines Day Every man is a poet when he is in love 所有文章完整的素材源码都在👇👇 粉丝白嫖源码福利,请移步至CSDN社区或文末公众hao即可免费。 哈喽!我是你们的木木子吖~ 情人节又到了,礼物备好了没&am…...

压力应变电桥信号隔离放大变送器差分输入0-±10mV/0-±20mV转0-20mA/0-10v
概述:DIN11 IPO 压力应变桥信号处理系列隔离放大器是一种将差分输入信号隔离放大、转换成按比例输出的直流信号导轨安装变送模块。产品广泛应用在电力、远程监控、仪器仪表、医疗设备、工业自控等行业。此系列模块内部嵌入了一个高效微功率的电源,向输入…...
Linux系统之部署个人导航页
Linux系统之部署个人导航页 一、本次导航页工具介绍二、检查本地系统环境1.检查系统版本2.检查系统内核版本三、下载导航页软件包1.创建下载目录2.下载导航页软件包四、部署前环境准备工作1.安装python32.安装pipenv3.创建虚拟环境①创建环境②修改base.py文件③修改settings.p…...
四、Windows 平台安装 MongoDB
MongoDB 提供 64 位系统的预编译二进制包 我们可以从 MongoDB 官网下载安装 MongoDB 预编译二进制包下载地址:Try MongoDB Atlas Products | MongoDB 在 MongoDB 2.2 版本后已经不再支持 Windows XP 系统 最新版本也已经没有了 32 位系统的安装文件 MongoDB for W…...

浅谈应用安全测试工具
正确的应用程序安全测试工具可以改善企业安全态势和开发工作流程。如今,应用程序安全从一开始就内置在整个软件生命周期中,即使是具有成熟开发实践的组织也需要自动化工具来在复杂、快速变化的环境中成功地保护他们的软件。以下比较了三个广泛使用的应用…...

四类(七种)排序算法总结
一、插入排序 基本思想: 每次将一个待排序的对象,按其关键码大小,插入到前面已经排好序的一组对象的适当位置上,直到对象全部插入为止。即边插入边排序,保证子序列中随时都是排好序的。 基本操作——有序插入ÿ…...

[oeasy]python0083_十进制数如何存入计算机_八卦纪事_BCD编码_Binary_Coded_Decimal
编码进化 回忆上次内容 上次 研究了 视频终端的 演化 从VT05 到 VT100从 黑底绿字 到 RGB 24位真彩色形成了 VT100选项 从而 将颜色 数字化 了 生活中我们更常用 10个数字 但是 计算机中 用二进制 日常计数的十进制数 是如何存储进计算机的呢?🤔 从10进制到2进…...
理解框架的编译时与运行时
首先我们需要先理解一下什么事编译时和运行时 在语言层面,先来聊一下前端开发者最常遇见的两种语言JavaScript和Java Java的代码就是被编译为.class 文件才能运行,这个编译过程就是编译时,运行 .class 文件就是运行时我们在浏览器直接输入一…...

推挽电路---采用二极管消除交越失真----克服交越失真的互补推挽输出电路图
交越失真产生的原因及消除方法 由于晶体管的门限电压不为零,比如一般的硅三极管,NPN型在0.7V以上才导通,这样在00.7就存在死区,不能完全模拟出输入信号波形,PNP型小于-0.7V才导通,比如当输入的交流的正弦波…...

龙虎榜——20250610
上证指数放量收阴线,个股多数下跌,盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型,指数短线有调整的需求,大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的:御银股份、雄帝科技 驱动…...

边缘计算医疗风险自查APP开发方案
核心目标:在便携设备(智能手表/家用检测仪)部署轻量化疾病预测模型,实现低延迟、隐私安全的实时健康风险评估。 一、技术架构设计 #mermaid-svg-iuNaeeLK2YoFKfao {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg…...
【Web 进阶篇】优雅的接口设计:统一响应、全局异常处理与参数校验
系列回顾: 在上一篇中,我们成功地为应用集成了数据库,并使用 Spring Data JPA 实现了基本的 CRUD API。我们的应用现在能“记忆”数据了!但是,如果你仔细审视那些 API,会发现它们还很“粗糙”:有…...
WEB3全栈开发——面试专业技能点P2智能合约开发(Solidity)
一、Solidity合约开发 下面是 Solidity 合约开发 的概念、代码示例及讲解,适合用作学习或写简历项目背景说明。 🧠 一、概念简介:Solidity 合约开发 Solidity 是一种专门为 以太坊(Ethereum)平台编写智能合约的高级编…...
Android Bitmap治理全解析:从加载优化到泄漏防控的全生命周期管理
引言 Bitmap(位图)是Android应用内存占用的“头号杀手”。一张1080P(1920x1080)的图片以ARGB_8888格式加载时,内存占用高达8MB(192010804字节)。据统计,超过60%的应用OOM崩溃与Bitm…...

有限自动机到正规文法转换器v1.0
1 项目简介 这是一个功能强大的有限自动机(Finite Automaton, FA)到正规文法(Regular Grammar)转换器,它配备了一个直观且完整的图形用户界面,使用户能够轻松地进行操作和观察。该程序基于编译原理中的经典…...
Xen Server服务器释放磁盘空间
disk.sh #!/bin/bashcd /run/sr-mount/e54f0646-ae11-0457-b64f-eba4673b824c # 全部虚拟机物理磁盘文件存储 a$(ls -l | awk {print $NF} | cut -d. -f1) # 使用中的虚拟机物理磁盘文件 b$(xe vm-disk-list --multiple | grep uuid | awk {print $NF})printf "%s\n"…...

云原生安全实战:API网关Kong的鉴权与限流详解
🔥「炎码工坊」技术弹药已装填! 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 一、基础概念 1. API网关(API Gateway) API网关是微服务架构中的核心组件,负责统一管理所有API的流量入口。它像一座…...

android13 app的触摸问题定位分析流程
一、知识点 一般来说,触摸问题都是app层面出问题,我们可以在ViewRootImpl.java添加log的方式定位;如果是touchableRegion的计算问题,就会相对比较麻烦了,需要通过adb shell dumpsys input > input.log指令,且通过打印堆栈的方式,逐步定位问题,并找到修改方案。 问题…...
MySQL 主从同步异常处理
阅读原文:https://www.xiaozaoshu.top/articles/mysql-m-s-update-pk MySQL 做双主,遇到的这个错误: Could not execute Update_rows event on table ... Error_code: 1032是 MySQL 主从复制时的经典错误之一,通常表示ÿ…...