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

超详细的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 运算符?

什么是运算符&#xff1f; 本章节主要说明Python的运算符。举个简单的例子 4 5 9 。 例子中&#xff0c;4 和 5 被称为操作数&#xff0c; 称为运算符。 Python语言支持以下类型的运算符: 算术运算符 比较&#xff08;关系&#xff09;运算符 赋值运算符 逻辑运算符 位运算符…...

linux nuxt 部署 问题汇总

安装node centos 7 请选择 node版本 v16.1.0 进行安装&#xff0c; npm 版本 7.11.2 亲测这个版本有效&#xff0c;否则会出现 Error: Cannot find module ‘node:fs/promises‘ 等问题 node安装亲参照&#xff1a; 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先析构的原因编译器实现机制…...

电子招投标系统源码之 —采购数字化转型快人一步,以大数据支撑供应链管理未来

采购数字化转型快人一步&#xff0c;以大数据支撑供应链管理未来 招标采购为主的一站式全流程数字化采供协同。平台满足询比价、招标、竞价、拍卖、协议直采、商城采购等多种采购定价方式&#xff0c;采购过程全程留痕可追溯。平台支持企业通过WEB、APP、小程序等终端完成采购需…...

ie获取cookie数据,中文乱码;cookie中文乱码终极解决办法

终极解决办法 cookie存中文数据是会出现乱码的&#xff0c;所以在存数据前&#xff0c;得先“编码”&#xff0c;取的时候先“解码” JS方法-编码&#xff1a;encodeURI("你好") 结果&#xff1a;"%E4%BD%A0%E5%A5%BD"JS方法-解码&#xff1a;decodeURI(&…...

day16_关键字this和super丶就近原则和追根溯源原则

this关键字 含义&#xff1a;this代表当前对象 this使用位置 this在实例初始化相关的代码块和构造器中&#xff1a;表示正在创建的那个实例对象&#xff0c;即正在new谁&#xff0c;this就代表谁this在非静态实例方法中&#xff1a;表示调用该方法的对象&#xff0c;即谁在调…...

MySQL 共享锁 (lock in share mode),排他锁 (for update)

共享锁 (lock in share mode) 简介 允许不同事务之间加共享锁读取&#xff0c;但不允许其它事务修改或者加入排他锁 如果有修改必须等待一个事务提交完成&#xff0c;才可以执行&#xff0c;容易出现死锁 共享锁事务之间的读取 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表单方式的请求调用&#xff0c;以及其…...

MATLAB | 情人节来绘制更立体的玫瑰花吧

又是一年情人节&#xff0c;今年带来一款更有立体感的玫瑰&#xff1a; 曲面的函数表达式来自: http://www.bugman123.com/Math/index.html 这个网站&#xff0c;上面还有很多其他帅气的玩意。 基础绘制 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 所有文章完整的素材源码都在&#x1f447;&#x1f447; 粉丝白嫖源码福利&#xff0c;请移步至CSDN社区或文末公众hao即可免费。 哈喽&#xff01;我是你们的木木子吖~ 情人节又到了&#xff0c;礼物备好了没&am…...

压力应变电桥信号隔离放大变送器差分输入0-±10mV/0-±20mV转0-20mA/0-10v

概述&#xff1a;DIN11 IPO 压力应变桥信号处理系列隔离放大器是一种将差分输入信号隔离放大、转换成按比例输出的直流信号导轨安装变送模块。产品广泛应用在电力、远程监控、仪器仪表、医疗设备、工业自控等行业。此系列模块内部嵌入了一个高效微功率的电源&#xff0c;向输入…...

Linux系统之部署个人导航页

Linux系统之部署个人导航页 一、本次导航页工具介绍二、检查本地系统环境1.检查系统版本2.检查系统内核版本三、下载导航页软件包1.创建下载目录2.下载导航页软件包四、部署前环境准备工作1.安装python32.安装pipenv3.创建虚拟环境①创建环境②修改base.py文件③修改settings.p…...

四、Windows 平台安装 MongoDB

MongoDB 提供 64 位系统的预编译二进制包 我们可以从 MongoDB 官网下载安装 MongoDB 预编译二进制包下载地址&#xff1a;Try MongoDB Atlas Products | MongoDB 在 MongoDB 2.2 版本后已经不再支持 Windows XP 系统 最新版本也已经没有了 32 位系统的安装文件 MongoDB for W…...

浅谈应用安全测试工具

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

四类(七种)排序算法总结

一、插入排序 基本思想&#xff1a; 每次将一个待排序的对象&#xff0c;按其关键码大小&#xff0c;插入到前面已经排好序的一组对象的适当位置上&#xff0c;直到对象全部插入为止。即边插入边排序&#xff0c;保证子序列中随时都是排好序的。 基本操作——有序插入&#xff…...

[oeasy]python0083_十进制数如何存入计算机_八卦纪事_BCD编码_Binary_Coded_Decimal

编码进化 回忆上次内容 上次 研究了 视频终端的 演化 从VT05 到 VT100从 黑底绿字 到 RGB 24位真彩色形成了 VT100选项 从而 将颜色 数字化 了 生活中我们更常用 10个数字 但是 计算机中 用二进制 日常计数的十进制数 是如何存储进计算机的呢?&#x1f914; 从10进制到2进…...

理解框架的编译时与运行时

首先我们需要先理解一下什么事编译时和运行时 在语言层面&#xff0c;先来聊一下前端开发者最常遇见的两种语言JavaScript和Java Java的代码就是被编译为.class 文件才能运行&#xff0c;这个编译过程就是编译时&#xff0c;运行 .class 文件就是运行时我们在浏览器直接输入一…...

推挽电路---采用二极管消除交越失真----克服交越失真的互补推挽输出电路图

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

day11_面向对象

今日内容 零、 复习昨日 一、一日一题(数组,OOP) 二、面向对象练习&#xff08;方法参数返回值&#xff09; 三、局部变量&成员变量 四、this关键字 五、构造方法 六、重载 七、封装 小破站同步上课视频: https://space.bilibili.com/402601570/channel/collectiondetail?…...

大数据处理学习笔记1.1 搭建Scala开发环境

文章目录零、本讲学习目标一、Scala简介&#xff08;一&#xff09;Scala概述&#xff08;二&#xff09;函数式编程&#xff08;三&#xff09;Scala特性1、一切都是对象2、一切都是函数3、一切都是表达式&#xff08;四&#xff09;在线运行Scala二、选择Scala版本三、Window…...

VSCODE C++ 调用matplotlibcpp画图

使用VSCODE编写C程序&#xff0c;想在调试过程中看中间数据的波形&#xff0c;于是找到了python的matplotlibcpp库&#xff0c;参考文章链接是&#xff1a;https://blog.csdn.net/weixin_43769166/article/details/118365416&#xff1b;按照他的步骤配置好之后&#xff0c;跳出…...

面对“开门红”,跨境支付如何寻求新增长曲线?

易观&#xff1a;2022年是第三方支付行业洗牌加剧的一年&#xff0c;在部分机构选择退出的过程中&#xff0c;也有机构开始瞄准跨境业务&#xff0c;成为了支付机构转型的重要方向之一。跨境支付是指两个或及其以上的国家或地区进行国际贸易、国际投资或其他经济活动&#xff0…...

MySQL入门篇-MySQL MHA高可用实战

MHA简介 MHA&#xff08;Master High Availability&#xff09;目前在MySQL高可用方面是一个相对成熟的解决方案&#xff0c;它由日本DeNA公司的youshimaton&#xff08;现就职于Facebook公司&#xff09;开发&#xff0c;是一套优秀的作为MySQL高可用性环境下故障切换和主从提…...

C语言文件操作

目录1.文件指针2.文件的打开和关闭3.文件的读写3.1文件的顺序读写fgetc和fputcfgets和fputsfscanf和fprintffread和fwrite3.2文件的随机读写fseekftellrewind4.文本文件和二进制文件5.文件读取结束的判定6.文件缓冲区1.文件指针 在文件操作中&#xff0c;一个关键的概念是文件…...

Flink中核心重点总结

目录 1. 算子链 1.1. 一对一&#xff08;One-to-one&#xff0c; forwarding&#xff09; 1.2. 重分区&#xff08;Redistributing&#xff09; 1.3. 为什么有算子链 2. 物理分区&#xff08;Physical Partitioning&#xff09; 2.1. 什么是分区 2.2. 随机分区&#xff…...

gismo中NURBS的相关函数的使用---待完善

文章目录 前言一、B样条的求值1.1 节点向量的生成1.2 基函数的调用1.3 函数里面的T指的是系数类型二、以等几何两个单元12个控制点为例输出的控制点坐标有误1.4二、#pic_center <table><tr><td bgcolor=PowderBlue>二维数2.12.22.32.4三、3.13.23.33.4四、4.…...

5.数据共享与持久化

数据共享与持久化 在容器中管理数据主要有两种方式&#xff1a; 数据卷&#xff08;Data Volumes&#xff09;挂载主机目录 (Bind mounts) 数据卷 数据卷是一个可供一个或多个容器使用的特殊目录&#xff0c;它绕过UFS&#xff0c;可以提供很多有用的特性&#xff1a; 数据…...

RabbitMQ-客户端源码之AMQCommand

AMQCommand不是直接包含Method等成员变量的&#xff0c;而是通过CommandAssembler又做了一次封装。 接下来先看下CommandAssembler类。此类中有这些成员变量&#xff1a; /** Current state, used to decide how to handle each incoming frame. */ private enum CAState {EXP…...

临沧市住房和城乡建设局网站/网站运营课程

数值和字符串之间的转换 字符串  数值 Number.parseLocale(value) Number.parseInvariant(value) 数值  字符串Number.prototype.format(format) Number.prototype.localeFormat(format)localeFormat和parseLocale方法 需要将EnableScriptGlobalization属性设为true 浏览器…...

动态网页文件/葫岛百度seo

抓取目标&#xff1a;就是我自己的博客&#xff1a;http://www.cnblogs.com/ghostwu/ 需要实现的功能&#xff1a; 抓取博客所有的文章标题&#xff0c;超链接&#xff0c;文章摘要&#xff0c;发布时间 需要用到的库&#xff1a; node.js自带的http库 第三方库:cheerio&a…...

收录批量查询/seo网站关键词优化软件

1、温度转换 while True:a int(input("摄氏度转换为华氏度请按1\n华氏度转换为摄氏度请按2\n"))if a 1:celsius float(input("请输入摄氏度&#xff1a;"))# 计算华氏温度fahrenheit (celsius 1.8) 32 # f c9/532print({:.2f}摄氏度转换为华氏度为…...

织梦网站模板做的网站有哪些/最快的新闻发布平台

1. 安装 vue-devtools 调试工具 vue 官方提供的 vue-devtools 调试工具&#xff0c;能够方便开发者对 vue 项目进行调试与开发。 Chrome 浏览器在线安装 vue-devtools &#xff1a;https://chrome.google.com/webstore/detail/vuejs-devtools/nhdogjmejiglipccpnnnanhbledajb…...

招生网站建设策划方案/营销运营主要做什么

如果你还没有安装好SciTE&#xff0c;可以参考《在ubuntu 12.04 中安装SciTE 文本编辑器》。刚安装好的SciTE文本编辑器非常简朴&#xff0c;需要经过适当配置才能成为真正称手的编程利器。下文中的所有配置项&#xff0c;可以直接拷贝&#xff0c;然后粘贴到SciTE的用户设置文…...

宜宾建设招标网站/网站建设多少钱

酷壳博主、亚马逊高级研发经理陈皓&#xff0c;作了《高并发互联网应用性能优化实践》&#xff0c;演讲中提出一个新的观点——节省资源&#xff0c;少用资源&#xff0c;你的程序可能会跑得更快。还解析扩展的三个方向和程序性能等精彩观点。 扩展性总结出三点&#xff1a; X轴…...