JavaSE day15 笔记

news2024/12/26 21:16:48

第十五天课堂笔记

数组

可变长参数★★★

  • 方法 : 返回值类型 方法名(参数类型 参数名 , 参数类型 可变长参数名){}
  • 方法体 : 变长参数 相当于一个数组
  • 一个数组最多只能有一个可变长参数, 并放到列表的最后
  • parameter : 方法参数

数组相关算法★★

  • 冒泡排序

    • 由小到大: 从前向后两两比较,将大的通过交换放到后面
    • 轮数 : n个数 ,就是n-1轮
    • 每一轮判断次数: 第i轮 , n - i 次

    image-20240329113447194

  • 选择排序

    • n个元素, 进行n-1轮排序
    • 每一轮获取最小元素 和 第i个位置上的元素进行互换

    image-20240329140501309

  • 插入排序

    • 数组 分为 已排序 , 未排序 两部分
    • 遍历未排序的部分, 依序插入到已排序的部分中
    • 当前未排序数组第一个值j 的前一个就是已排序的最后一个 => i = j - 1
    • while循环向前找,知道找到在已排序数组对应的索引值 , 只要j对应的值小, 就让判断的那个i值向后移动

    image-20240329145443919

  • 代码如下

        /**
         * 插入排序
         *
         * @param arrs : 数组
         */
        private static void insertSort(int[] arrs) {
            // 未排序数组的循环遍历
            for (int j = 1; j < arrs.length; j++) {
                // 定义指针 => 已排序数组最后面的指针
                int i = j - 1;
                int temp = arrs[j];  // 获取i当前的数
                while (i >= 0 && temp < arrs[i]) {
                    arrs[i + 1] = arrs[i];  // 将值后移
                    i--;  // 继续判断前一个值
                }
                arrs[++i] = temp;  // 将j值插入到对应的位置
            }
        }
    
  • 二分查找算法

    • 前提 : 数组有序
    • 定义双指针 , 始终与中间元素比较, 相等找到了, 否则把范围缩小一半继续查找

    image-20240329160847992

  • 代码如下

       /**
         * 二分查找target
         *
         * @param arrs   : 数组
         * @param target : 目标值
         * @return : 返回索引值
         */
        private static int getBinarySearch(int[] arrs, int target) {
            int i = 0, j = arrs.length - 1; // 定义索引
            while (i <= j) {
                int mid = (i + j) >>> 1; // 获取中间值
                if (arrs[mid] == target) {
                    return mid;
                } else if (arrs[mid] < target) {
                    // 动i
                    i = mid + 1;
                } else if (target < arrs[mid]) {
                    // 动j
                    j = mid - 1;
                }
            }
            return -1;
        }
    
  • 使用递归实现

       /**
         * 使用递归实现
         *
         * @param arrs   : 数组
         * @param target : 目标值
         * @param start  : 开始至
         * @param end    : 结束值
         * @return : 返回索引
         */
        private static int binSeaGetTargetRecur(int[] arrs, int target, int start, int end) {
            if (start >= end) {
                return -1;
            }
            int mid = (start + end) >>> 1;
            if (arrs[mid] == target) {
                return mid;
            }
            if (arrs[mid] < target) {
                return binSeaGetTargetRecur(arrs, target, mid + 1, end);
            } else {
                return binSeaGetTargetRecur(arrs, target, start, mid);
            }
        }
    

Arrays类的常用方法★★★

  • asList() : 将数据转换为集合
  • int binarySearch(int[] arrs , int key) ; 二分查找
  • copeOf() : 复制数组
    • 定义一个新数组, 把数组中的数据复制到新数组中,返回新数组
    • 新数组长度可以更大,也可以更小
    • 长度更大, 把新数组索引复制给数组, => 数组扩容
  • fill() : 填充
  • sort() : 排序
  • stream() : 根据数组生成stream流
  • tostring() : 数组连接字符串
  • 代码如下
public static void main(String[] args) {
        // 定义一个数组
        int[] arrs = new int[]{1, 3, 5, 2, 5, 8, 4, 67, 3, 6};
        // asList(T... a) 返回由指定数组支持的固定大小的列表。
        List<int[]> list = Arrays.asList(arrs);
        System.out.println("list = " + list);
        //binarySearch(byte[] a, byte key)  :使用二进制搜索算法搜索指定值的指定字节数组。
        int target = 131;
        int i = Arrays.binarySearch(arrs, target);
        System.out.println("i = " + i);
        // copyOf(boolean[] original, int newLength) : 填充,以使副本具有指定的长度 : 数组扩容。
        int[] ints = Arrays.copyOf(arrs, arrs.length * 2);
        arrs = ints;
        System.out.println("Arrays.toString(arrs) = " + Arrays.toString(arrs));
        int[] ints1 = Arrays.copyOf(arrs, 5);
        System.out.println("Arrays.toString(ints1) = " + Arrays.toString(ints1));
        // copyOfRange(int[] original, int from, int to) : 将指定数组的指定范围复制到新数组中。
        int[] ints2 = Arrays.copyOfRange(arrs, 2, 5);
        System.out.println("Arrays.toString(ints2) = " + Arrays.toString(ints2));
        //fill(int[] a, int fromIndex, int toIndex, int val) : 将指定的int值分配给指定的int数组的指定范围的每个元素。
        Arrays.fill(arrs, 1, 3, 999);
        System.out.println("Arrays.toString(arrs) = " + Arrays.toString(arrs));
        //hashCode(int[] a) 根据指定数组的内容返回哈希码。
        System.out.println("Arrays.hashCode(arrs) = " + Arrays.hashCode(arrs));
        //parallelSort(int[] a)按照数字顺序排列指定的数组。
        Arrays.parallelSort(arrs);
        System.out.println("Arrays.toString(arrs) = " + Arrays.toString(arrs));
        //sort(int[] a, int fromIndex, int toIndex)按升序排列数组的指定范围。
        Arrays.sort(ints1);
        System.out.println("Arrays.toString(ints1) = " + Arrays.toString(ints1));
    }

对象数组

image-20240329172648828

  • 练习代码如下
/**
 * 对象数组练习题
 */
public class Test01ObjectArrs {
    public static void main(String[] args) {
        // 创建一个随机数组
        int m = 50; // 对象数组长度
        int size = 10; // 存入个数
        Student[] students = createObjectArrs(m, size);
        // 遍历
        // 统计不及格人数
        int count = 0; // 定义计数器变量
        for (int i = 0; i < size; i++) {
            System.out.println("students[i].toString() = " + students[i].toString());
            if (students[i].stuCourse < 60) {
                count++;
            }
        }
        System.out.println("count = " + count); // 不及格人的个数
        // 1 查看data数组中是否存在姓名为wangwu的同学
        students[size++] = new Student("王五", createCourse());
        String targetName = "王五";
        int isExist = isExist(size, students, targetName);
        System.out.println(isExist > 0 ? "存在" : "不存在");

        //2 从数组中删除姓名为zhaoliu的同学
        // 判断该姓名同学是否存在
        students[2].stuName = "张三";
        String deleteName = "张三";
        int isIndex = isExist(size, students, deleteName);
        System.out.println("isIndex = " + isIndex);
        if (isIndex > 0) {
            // 存在,即删除对象数组 下标为isIndex 的元素
            students = deleteObjectArr(size, students, isIndex);
            size--;  // 数组元素个数减一
            // 删除成功, 遍历展示
            for (int i = 0; i < size; i++) {
                System.out.println("students[i].toString() = " + students[i].toString());
            }
        } else {
            // 不存在不用删除
            System.out.println("不存在,不用删除");
        }
    }

    /**
     * 删除
     *
     * @param size        : 对象个数
     * @param students    : 对象数组
     * @param deleteIndex : 删除目标索引
     */
    private static Student[] deleteObjectArr(int size, Student[] students, int deleteIndex) {
        // 定义一个新数组
        Student[] smallStus = new Student[students.length];
        // 将数组 [0 , deleteIndex - 1) 复制给新数组 : deleteIndex - 1个元素
        System.arraycopy(students, 0, smallStus, 0, deleteIndex);
        // 将数组 [deleteIndex + 1 , size) 复制给新数组 size - deleteIndex - 1个元素
        System.arraycopy(students, deleteIndex + 1, smallStus, deleteIndex, size - deleteIndex - 1);
        // 将samllStu的索引值 赋值给 数组
        return smallStus;
    }

    /**
     * 判断是否存在
     *
     * @param size       : 对象个数
     * @param students   : 对象数组
     * @param targetName : 目标名字
     * @return : 返回索引值
     */
    private static int isExist(int size, Student[] students, String targetName) {
        for (int i = 0; i < size; i++) {
            if (students[i].stuName.equals(targetName)) {
                return i;
            }
        }
        return -1;
    }

    /**
     * 生成对象数组
     *
     * @param m    : 数组长度
     * @param size : 对象个数
     * @return : 返回对象数组
     */
    private static Student[] createObjectArrs(int m, int size) {
        Student[] students = new Student[m];
        for (int i = 0; i < size; i++) {
            students[i] = new Student(createName(), createCourse());
        }
        return students;
    }

    /**
     * 生成随机名字的方法
     */
    private static String createName() {
        int n = (int) (Math.random() * (4 - 2) + 2); // 随机生成名字长度
        char[] ch = {'国', '泰', '民', '安', '中', '华', '崛', '起', '繁', '容', '昌', '盛'};
        StringBuilder name = new StringBuilder();
        for (int i = 0; i < n; i++) {
            name.append(ch[(int) (Math.random() * 12)]);
        }
        return name.toString();
    }

    /**
     * 生成一个随机成绩
     */
    private static int createCourse() {
        return (int) (Math.random() * 100);
    }
}

class Student {
    // 定义实例变量
    String stuName;
    // 成绩
    double stuCourse;

    public Student() {
    }

    public Student(String stuName, double stuCourse) {
        this.stuName = stuName;
        this.stuCourse = stuCourse;
    }

    @Override
    public String toString() {
        return "Student{" +
                "stuName='" + stuName + '\'' +
                ", stuCourse=" + stuCourse +
                '}';
    }
}

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

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

相关文章

标准库不带操作系统移植FreeModbus到STM32

添加FreeModbus代码 首先准备一个空白的标准库项目。 下载FreeModbus源码。 将源码中的modbus文件夹复制到项目路径下&#xff0c;并把demo->BARE->port文件夹的内容也添加进来。 新建一个文件port.c备用。然后打开项目&#xff0c;将上述文件添加至项目&#xff0c;…

OSPF---开放式最短路径优先协议

1. OSPF描述 OSPF协议是一种链路状态协议。每个路由器负责发现、维护与邻居的关系&#xff0c;并将已知的邻居列表和链路费用LSU报文描述&#xff0c;通过可靠的泛洪与自治系统AS内的其他路由器周期性交互&#xff0c;学习到整个自治系统的网络拓扑结构;并通过自治系统边界的路…

Vscode 常用插件和快捷键 2024版笔记

1. 常用插件2.常用快捷键 1. 常用插件 1.1 Chinese vscode 转成中文&#xff08;更新版后有进要重装&#xff09; 1.2 Live Server 浏览成网页 1.3 Material Icon Theme 文件目录和文件图标样式&#xff08;没有自定义&#xff09; 1.4 vscode 主题 1.5 代码截图 1.6 代码补…

【01-20】计算机网络基础知识(非常详细)从零基础入门到精通,看完这一篇就够了

【01-20】计算机网络基础知识&#xff08;非常详细&#xff09;从零基础入门到精通&#xff0c;看完这一篇就够了 以下是本文参考的资料 欢迎大家查收原版 本版本仅作个人笔记使用1、OSI 的七层模型分别是&#xff1f;各自的功能是什么&#xff1f;2、说一下一次完整的HTTP请求…

新能源充电桩站场AI视频智能分析烟火检测方案及技术特点分析

新能源汽车充电起火的原因多种多样&#xff0c;涉及技术、设备、操作等多个方面。从技术层面来看&#xff0c;新能源汽车的电池管理系统可能存在缺陷&#xff0c;导致电池在充电过程中出现过热、短路等问题&#xff0c;从而引发火灾。在设备方面&#xff0c;充电桩的设计和生产…

Python环境下基于机器学习的空压机故障识别(出口阀泄漏等)

Python环境下基于机器学习&#xff08;多层感知机&#xff0c;决策树&#xff0c;随机森林&#xff0c;高斯过程&#xff0c;AdaBoost&#xff0c;朴素贝叶斯&#xff09;的压缩机故障识别&#xff08;出口阀泄漏&#xff0c;止逆阀泄露&#xff0c;轴承损伤&#xff0c;惯性轮…

京东数据API接口采集/京东商品详情页SKU实时采集

京东电商实时数据采集是指通过自动化工具和技术&#xff0c;定时或不间断地收集京东电商平台的数据。这些数据可以包括商品信息、价格、销量、评价等。通过实时数据采集&#xff0c;可以帮助京东电商平台及其卖家了解市场情况、监控竞争对手、优化产品定价和营销策略等。 企业级…

C语言从入门到精通- CLion安装配置Gitee

CLion安装Gitee 需要先申请Gitee账号。 下载gitee插件 在CLion的plugins中查找gitee,安装后重启CLion。 CLion上关联gitee账号 安装git软件 下载git 访问网站&#xff1a; Git - Downloading Package (git-scm.com) 安装 创建本地用户名和邮箱 在弹出的命令行窗体中输入用户名…

vite+vue3使用模块化批量发布Mockjs接口

在Vue3项目中使用Mock.js可以模拟后端接口数据&#xff0c;方便前端开发和调试。下面是使用vitevue3使用模块化批量发布Mockjs接口的步骤&#xff1a; 1. 安装Mock.js 在Vue3项目的根目录下&#xff0c;使用以下命令安装Mock.js&#xff1a; npm install mockjs --save-dev …

constexpr与std::is_same_v碰撞会产生什么火花?

1. 只编译会用到的if分支 示例代码一中&#xff0c;checkType_v1和checkType_v2两个函数的区别就是if的条件里一个加了constexpr一个没加&#xff0c;加与不加从结果来看都一样&#xff0c;那在编译时和运行时各有什么区别呢&#xff1f; 示例代码一&#xff0c;test_01.cpp&…

canvas画图,拖动已经画好的矩形

提示&#xff1a;canvas画图写文字 文章目录 前言一、写文字总结 前言 一、写文字 test.html <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-widt…

【物联网】Qinghub opc-ua 连接协议

基础信息 组件名称 &#xff1a; opcua-connector 组件版本&#xff1a; 1.0.0 组件类型&#xff1a; 系统默认 状 态&#xff1a; 正式发布 组件描述&#xff1a;通过OPCUA连接网关&#xff0c;通过定时任务获取OPCUA相关的数据或通过执行指令控制设备相关参数。 配置文件&a…

基于spring boot的在线购票系统

在线购票系统的设计与实现 【摘要】这套在线购票系统是根据当前的现实需要&#xff0c;从现实工作中着手&#xff0c;剖析了以往的在线购票系统中出现的一些问题&#xff0c;并进一步提高了使用者的操作体验。利用电脑来对资料进行处理&#xff0c;以代替传统的手工方式进行资…

spring-boot之接口文档Swagger配置使用

Swagger 前后端分离 Vue SpringBoot 后端时代:前端只用管理静态页面; html> 后端。模板引擎JSP >后端是主力 前后端分离式时代: ●后端:后端控制层&#xff0c;服务层,数据访问层[后端团队] ●前端:前端控制层&#xff0c;视图层[前端团队] 。伪造后端数据&#xff0c;…

【保姆级】2024年最新Onlyfans使用订阅教程

【必看】开通步骤 订阅OnlyFans的步骤简要总结如下&#xff1a; 开通虚拟信用卡&#xff1a;虚拟信用卡开通使用教程。开卡后&#xff0c;进入首页&#xff0c;就能看到自己的虚拟信用卡信息把虚拟信用卡的信息填写到OnlyFans绑定信用卡界面就OK了 从上面的链接进入开卡费可…

Springboot工程依赖包与执行包分离打包与构建docker 镜像

文章目录 一、概述二、工程概况1. 代码原始结构2. 运行界面 三、常规打包1. 打包命令2. jar包结构 四、分离依赖包、执行包步骤1. 引入依赖包管理插件2. 打包验证 一、概述 某大数据项目&#xff0c;使用springboot常规打包方式&#xff0c;打出来的一体化执行包达几百兆&…

第三十二天-Django模板-DTL模板引擎

目录 1.介绍 2. 使用 1.配置jinja2 2.DTL模板变量使用 3.与jinja2区别 4.模板标签使用 1.循环 2.条件控制 3.注释 4.url解析 5.显示时间 5.模板的基础与包含 6.过滤器 内置过滤器 自定义过滤器 1.介绍 2. 使用 1.配置jinja2 2.DTL模板变量使用 与jinja2语法相似…

ssm 科研奖励申报管理系统开发mysql数据库web结构java编程计算机网页源码eclipse项目

一、源码特点 ssm 科研奖励申报管理系统是一套完善的信息系统&#xff0c;结合springMVC框架完成本系统&#xff0c;对理解JSP java编程开发语言有帮助系统采用SSM框架&#xff08;MVC模式开发&#xff09;&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用…

激发数据潜力:企业数据中台的策略性构建与优化_光点科技

在信息时代&#xff0c;数据是企业价值链中不可或缺的一环。构建一个策略性的企业数据中台不仅能够整合分散的数据资源&#xff0c;还能提高决策效率和业务敏捷性。本文聚焦于如何策略性地构建和优化数据中台&#xff0c;以便企业能够最大化地利用数据资源&#xff0c;推动企业…

【测试篇】测试眼里的 BUG

文章目录 如何描述一个bug如何定义 bug 的级别BUG 的生命周期跟开发起争执怎么办&#xff08;高频面试题&#xff09; 如何描述一个bug 一个合格的bug描述应该包含以下几个部分&#xff1a; 发现问题的版本问题出现的环境错误重现的步骤预期行为的描述错误行为的描述其他&…