超详细的JAVA高级进阶基础知识04

news2024/9/21 19:09:07

目录

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));      // 1

        Arrays.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. 没找到, 返回-1
        return -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 今日学习目标

 

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

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

相关文章

Java面试——Spring Bean相关知识

目录 1.Bean的定义 2.Bean的生命周期 3.BeanFactory及Factory Bean 4.Bean的作用域 5.Bean的线程安全问题 1.Bean的定义 JavaBean是描述Java的软件组件模型。在Java模型中&#xff0c;通过JavaBean可以无限扩充Java程序的功能&#xff0c;通过JavaBean的组合可以快速的生…

Day887.MySQL写入binlog和redolog的流程机制 -MySQL实战

MySQL写入binlog和redolog的流程机制 Hi&#xff0c;我是阿昌&#xff0c;今天学习记录的是关于MySQL写入binlog和redolog的流程机制的内容。 只要 redo log 和 binlog 保证持久化到磁盘&#xff0c;就能确保 MySQL 异常重启后&#xff0c;数据可以恢复。 那redo log 的写入…

《第一行代码》 第四章:碎片的最佳实践

一&#xff0c;碎片的简单用法 在一个活动中添加两个碎片&#xff0c;并且让这两个碎片平分活动空间。 第一步&#xff1a;首先在layout中创建 left_fragment.xml&#xff1a; <LinearLayout xmlns:android"http://schemas.android.com/apk/res/android"androi…

【LoRaWAN 时钟同步】

本文主要介绍了 LoRaWAN 自组网协议、设备工作模式、设备间的时间同步问题 LoRaWAN 时钟同步1. 前言2. 设备数据收发2.1 数据帧格式2.2 数据发送2.3 数据接收3. A类设备4. C类设备5. B类设备5.1 GPS5.3 网关时间同步5.4 节点时间同步5.4.1 首次时间同步5.4.2 节点接收Beacon5.5…

生成系列论文:文本控制的3d点云生成 TextCraft(一):论文概览

TextCraft: Zero-Shot Generation of High-Fidelity and Diverse Shapes from Text 论文原文&#xff1a; https://arxiv.org/abs/2211.01427 论文的研究动机 DALL2已经在文本控制的图像生成上取得很好的效果&#xff0c;但是基于文本控制的3d点云生成的研究还不太成熟&#…

软件架构知识2-系统复杂度

架构设计的真正目的&#xff1a;是为了解决软件系统复杂度带来的问题&#xff0c;一个解决方案。 系统复杂度&#xff0c;如何入手&#xff1a; 1、通过熟悉和理解需求&#xff0c;识别系统复杂性所在的地方&#xff0c;然后针对这些复杂点进行架构设计。 2、架构设计并不是要…

毕业3年不到选择跳槽,居然拿到20K的薪资,简直了···

本人本科就读于某普通院校&#xff0c;毕业后通过同学的原因加入软件测试这个行业&#xff0c;角色也从测试小白到了目前的资深工程师&#xff0c;从功能测试转变为测试开发&#xff0c;并顺利拿下了某二线城市互联网企业Offer&#xff0c;年薪 30W 选择和努力哪个重要&#xf…

Java Email 发HTML邮件工具 采用 freemarker模板引擎渲染

Java Email 发HTML邮件工具 采用 freemarker模板引擎 1.常用方式对比 Java发送邮件有很多的实现方式 第一种&#xff1a;Java 原生发邮件mail.jar和activation.jar <!-- https://mvnrepository.com/artifact/javax.mail/mail --> <dependency><groupId>jav…

使用VUE自定义组件封装部门选择功能

背景 照惯例&#xff0c;先交待下背景&#xff0c;从真实需求出发&#xff0c;讲述实现效果、设计思路和实现方式。 软件系统中&#xff0c;会有一些常见常用的选择功能&#xff0c;如部门选择、人员选择等&#xff0c;用于填报表单&#xff0c;使用频率很高。直接使用一方面会…

浅谈应用安全测试工具

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

MAVEN打包这一篇就够了

Maven打包说明IDEA目录结构Java代码从编码到最后运行到两个核心步骤为"编译"和"执行"。"编译"会根据"源代码"产出对应的".class"文件&#xff0c;而"执行"就是让程序运行起来&#xff0c;运行的对象就是这些"…

【C语言学习笔记】:动态库

一、动态库 通过之前静态库那篇文章的介绍。发现静态库更容易使用和理解&#xff0c;也达到了代码复用的目的&#xff0c;那为什么还需要动态库呢&#xff1f; 1、为什么还需要动态库&#xff1f; 为什么需要动态库&#xff0c;其实也是静态库的特点导致。 ▶ 空间浪费是静…

怎么打造WhatsApp Team?SaleSmartly(ss客服)告诉你

关键词&#xff1a;WhatsApp Team SaleSmartly&#xff08;ss客服&#xff09; 您是否正在寻找一种让您的团队能够在 WhatsApp协作消息传递的解决方案?拥有了 WhatsApp Team&#xff0c;不仅效率提升&#xff0c;还可以在智能聊天工具中比如SaleSmartly&#xff08;ss客服&…

51单片机——中断系统,小白讲解,相互学习

中断介绍 中断是为使单片机具有对外部或内部随机发生的事件实时处理而设置的&#xff0c;中断功能的存在&#xff0c;很大程度上提高了单片机处理外部或内部事件的能力。它也是单片机最重要的功能之一&#xff0c;是我们学些单片机必须要掌握的。 为了更容易的理解中断概念&…

算法思想 - 动态规划算法

动态规划算法通常用于求解具有某种最优性质的问题。在这类问题中&#xff0c;可能会有许多可行解。每一个解都对应于一个值&#xff0c;我们希望找到具有最优值的解。动态规划算法与分治法类似&#xff0c;其基本思想也是将待求解问题分解成若干个子问题&#xff0c;先求解子问…

哈希表题目:判断路径是否相交

文章目录题目标题和出处难度题目描述要求示例数据范围解法一思路和算法代码复杂度分析解法二思路和算法代码复杂度分析题目 标题和出处 标题&#xff1a;判断路径是否相交 出处&#xff1a;1496. 判断路径是否相交 难度 3 级 题目描述 要求 给你一个字符串 path\texttt…

【软考系统架构设计师】2022下案例分析历年真题

【软考系统架构设计师】2022下案例分析历年真题 【软考系统架构设计师】2022下案例分析历年真题【软考系统架构设计师】2022下案例分析历年真题2022下案例分析历年真题第一题&#xff08;25分&#xff09;2022下案例分析历年真题第二题&#xff08;25分&#xff09;2022下案例分…

使用纹理(Textures)

当物体表面并非是纯色的时候&#xff0c;比如带波点&#xff0c;斑纹或者表面有刮痕或被裂纹等&#xff0c;这些效果该如何实现呢&#xff1f; 这里我们需要提到一个概念是贴图&#xff08;Maps&#xff09;。Maps是覆盖在游戏物体上的2D图片&#xff0c;用来设置表面的颜色、s…

大数据-学习实践-1相关Linux

大数据-学习实践-1相关Linux (大数据系列) 文章目录大数据-学习实践-1相关Linux1知识点2具体内容2.1安装、使用2.2高级命令2.2.1文件2.2.2日期2.2.3进程2.2.4三剑客 (grep、sed、awk)2.3高级配置2.3.1分配IP&#xff1a;静态IP设置2.3.2起名&#xff08;hostname&#xff09;&…

工程经验:残差连接对网络训练的巨大影响

文章目录1、没有使用残差连接的网络难以训练2、loss 不下降的原因3、使用了残差连接的网络可以高效训练1、没有使用残差连接的网络难以训练 经典的 SegNet 网络结构如下&#xff1a; 在使用上图所示的 SegNet 作为噪声预测网络训练扩散模型&#xff08;DDPM&#xff09;时&…