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

笔记: JavaSE day15 笔记

第十五天课堂笔记

数组

可变长参数★★★

  • 方法 : 返回值类型 方法名(参数类型 参数名 , 参数类型 可变长参数名){}
  • 方法体 : 变长参数 相当于一个数组
  • 一个数组最多只能有一个可变长参数, 并放到列表的最后
  • 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) {// 动ii = mid + 1;} else if (target < arrs[mid]) {// 动jj = 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;}@Overridepublic String toString() {return "Student{" +"stuName='" + stuName + '\'' +", stuCourse=" + stuCourse +'}';}
}

相关文章:

笔记: JavaSE day15 笔记

第十五天课堂笔记 数组 可变长参数★★★ 方法 : 返回值类型 方法名(参数类型 参数名 , 参数类型 … 可变长参数名){}方法体 : 变长参数 相当于一个数组一个数组最多只能有一个可变长参数, 并放到列表的最后parameter : 方法参数 数组相关算法★★ 冒泡排序 由小到大: 从前…...

【Golang星辰图】数据处理的航海家:征服数据海洋的航行工具

数据处理的建筑师&#xff1a;用Go语言中构建稳固的数据分析建筑物 前言 数据处理和分析是现代计算机科学中的关键任务之一&#xff0c;而Go语言作为一门现代化的编程语言&#xff0c;也需要强大的数据处理和分析库来支持其在这一领域的应用。本文将介绍几款优秀的数据处理和…...

容器网络测试关键问题

资料问题 主要影响客户体验, 低级问题. 类似于单词拼写错误, 用词有歧义&#xff0c;等。 另一点是&#xff0c;我们的用户文档&#xff0c;主要偏向于技术向的描述&#xff0c;各种参数功能罗列。友商有比较好的最佳实践操作说明。我们后面也会都增加这样的最佳实践。golang o…...

6、Cocos Creator 2D 渲染组件:​Sprite 组件​

Sprite 组件 Sprite&#xff08;精灵&#xff09;是 2D/3D 游戏最常见的显示图像的方式&#xff0c;在节点上添加 Sprite 组件&#xff0c;就可以在场景中显示项目资源中的图片。 属性功能说明Type渲染模式&#xff0c;包括普通&#xff08;Simple&#xff09;、九宫格&#x…...

算法沉淀——动态规划篇(子数组系列问题(上))

算法沉淀——动态规划篇&#xff08;子数组系列问题&#xff08;上&#xff09;&#xff09; 前言一、最大子数组和二、环形子数组的最大和三、乘积最大子数组四、乘积为正数的最长子数组长度 前言 几乎所有的动态规划问题大致可分为以下5个步骤&#xff0c;后续所有问题分析都…...

通知中心架构:打造高效沟通平台,提升信息传递效率

随着信息技术的快速发展&#xff0c;通知中心架构作为一种关键的沟通工具&#xff0c;正逐渐成为各类应用和系统中必不可少的组成部分。本文将深入探讨通知中心架构的意义、设计原则以及在实际场景中的应用。 ### 什么是通知中心架构&#xff1f; 通知中心架构是指通过集中管…...

【Arduino使用SNR9816TTS模块教程】

【Arduino使用SNR9816TTS模块教程】 1.前言2. 硬件连接3. Arduino代码3.1 环境配置3.2 Arduino源码 4. 调试步骤5. 总结 1.前言 在今天的教程中&#xff0c;我们将详细介绍如何使用Arduino IDE开发ESP32C3与汕头新纳捷科技有限公司生产的SNR9816TTS中文人声语音合成模块进行交…...

牛客练习赛123(A,B,C,D)

牛客挑战赛&#xff0c;练习赛和小白月赛周赛不是一种东西。这玩意跟CF的div12差不多难度。而且找不到题解。所以决定不等题解补题了&#xff0c;直接写题解了。 比赛链接 光速签到下班&#xff0c;rk。感觉E可能能补掉&#xff0c;看情况补吧。 B题感觉之前考了两次&#x…...

docker部署-RabbitMq

1. 参考 RabbitMq官网 docker官网 2. 拉取镜像 这里改为自己需要的版本即可&#xff0c;下面容器也需要同理修改 docker pull rabbitmq:3.12-management3. 运行容器 docker run \ --namemy-rabbitmq-01 \ -p 5672:5672 \ -p 15672:15672 \ -d \ --restart always \ -…...

【智能算法】蜜獾算法(HBA)原理及实现

目录 1.背景2.算法原理2.1算法思想2.2算法过程 3.结果展示4.参考文献 1.背景 2021年&#xff0c;FA Hashim等人受到自然界中蜜獾狩猎行为启发&#xff0c;提出了蜜獾算法&#xff08;(Honey Badger Algorithm&#xff0c;HBA&#xff09;。 2.算法原理 2.1算法思想 蜜獾以其…...

9、鸿蒙学习-开发及引用静态共享包(API 9)

HAR&#xff08;Harmony Archive&#xff09;是静态共享包&#xff0c;可以包含代码、C库、资源和配置文件。通过HAR可以实现多个模块或多个工程共享ArkUI组件、资源等相关代码。HAR不同于HAP&#xff0c;不能独立安装运行在设备上&#xff0c;只能作为应用模块的依赖项被引用。…...

[Pytorch]:PyTorch中张量乘法大全

在 PyTorch 中&#xff0c;有多种方法可以执行张量之间的乘法。这里列出了一些常见的乘法操作&#xff1a; 总结&#xff1a; 逐元素乘法&#xff1a;*ortorch.mul()矩阵乘法&#xff1a;ortorch.mm()ortorch.matmul()点积&#xff1a;torch.Tensor.dot()批量矩阵乘法&#xff…...

【软考】防火墙技术

目录 1. 概念2. 包过滤防火墙3. 应用代理网关防火墙4. 状态检测技术防火墙 1. 概念 1.防火墙(Firewall)是建立在内外网络边界上的过滤封锁机制&#xff0c;它认为内部网络是安全和可信赖的&#xff0c;而外部网络是不安全和不可信赖的。2.防火墙的作用是防止不希望的、未经授权…...

OpenHarmony实战:Makefile方式组织编译的库移植

以yxml库为例&#xff0c;其移植过程如下文所示。 源码获取 从仓库获取yxml源码&#xff0c;其目录结构如下表&#xff1a; 表1 源码目录结构 名称描述yxml/bench/benchmark相关代码yxml/test/测试输入输出文件&#xff0c;及测试脚本yxml/Makefile编译组织文件yxml/.gitat…...

嵌入式C语言--GPT通用定时器

嵌入式C语言–GPT通用定时器 嵌入式C语言--GPT通用定时器 嵌入式C语言--GPT通用定时器一. GPT基本概念二. GPT的作用三. GPT通道的四个状态四. Continuous/One-Shot模式3.1&#xff09;Continuous模式3.2&#xff09;One-Shot模式 一. GPT基本概念 GPT即General Purpose Timer…...

『Apisix系列』破局传统架构:探索新一代微服务体系下的API管理新范式与最佳实践

一、『Apisix安装部署』 &#x1f680; 1.1 手把手教你从零部署APISIX高性能API网关 二、『Apisix入门篇』 &#x1f680; 2.1 从零到一掌握Apache APISIX&#xff1a;架构解析与实战指南 三、『Apisix进阶篇』 &#x1f680; 3.1 动态负载均衡&#xff1a;APISIX的实战演练…...

如何在极狐GitLab 自定义 Pages 域名、SSL/TLS 证书

本文作者&#xff1a;徐晓伟 GitLab 是一个全球知名的一体化 DevOps 平台&#xff0c;很多人都通过私有化部署 GitLab 来进行源代码托管。极狐GitLab 是 GitLab 在中国的发行版&#xff0c;专门为中国程序员服务。可以一键式部署极狐GitLab。 本文主要讲述了在极狐GitLab 用户…...

React Native 应用打包

引言 在将React Native应用上架至App Store时&#xff0c;除了通常的上架流程外&#xff0c;还需考虑一些额外的优化策略。本文将介绍如何通过配置App Transport Security、Release Scheme和启动屏优化技巧来提升React Native应用的上架质量和用户体验。 配置 App Transport…...

单链表就地逆置

算法思想&#xff1a;构建一个带头结点的单链表L&#xff0c;然后访问链表中的每一个数据结点&#xff0c;将访问到的数据结点依此插入到L的头节点之后。 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> typedef int ElemType; typedef s…...

MTU/TCPMSS/VLAN/ACCESS/TRUNK/HYBRID

MTU RFC标准定义以太网的默认MTU值为1500 最小64字节是为了保证最极端的冲突能被检测到&#xff0c;64字节是能被检测到的最小值&#xff1b;最大不超过1518字节是为了防止过长的帧传输时间过长而占用共享链路太长时间导致其他业务阻塞。所以规定以太网帧大小为64~1518字节&am…...

2025年能源电力系统与流体力学国际会议 (EPSFD 2025)

2025年能源电力系统与流体力学国际会议&#xff08;EPSFD 2025&#xff09;将于本年度在美丽的杭州盛大召开。作为全球能源、电力系统以及流体力学领域的顶级盛会&#xff0c;EPSFD 2025旨在为来自世界各地的科学家、工程师和研究人员提供一个展示最新研究成果、分享实践经验及…...

3.3.1_1 检错编码(奇偶校验码)

从这节课开始&#xff0c;我们会探讨数据链路层的差错控制功能&#xff0c;差错控制功能的主要目标是要发现并且解决一个帧内部的位错误&#xff0c;我们需要使用特殊的编码技术去发现帧内部的位错误&#xff0c;当我们发现位错误之后&#xff0c;通常来说有两种解决方案。第一…...

【HarmonyOS 5.0】DevEco Testing:鸿蒙应用质量保障的终极武器

——全方位测试解决方案与代码实战 一、工具定位与核心能力 DevEco Testing是HarmonyOS官方推出的​​一体化测试平台​​&#xff0c;覆盖应用全生命周期测试需求&#xff0c;主要提供五大核心能力&#xff1a; ​​测试类型​​​​检测目标​​​​关键指标​​功能体验基…...

python/java环境配置

环境变量放一起 python&#xff1a; 1.首先下载Python Python下载地址&#xff1a;Download Python | Python.org downloads ---windows -- 64 2.安装Python 下面两个&#xff0c;然后自定义&#xff0c;全选 可以把前4个选上 3.环境配置 1&#xff09;搜高级系统设置 2…...

376. Wiggle Subsequence

376. Wiggle Subsequence 代码 class Solution { public:int wiggleMaxLength(vector<int>& nums) {int n nums.size();int res 1;int prediff 0;int curdiff 0;for(int i 0;i < n-1;i){curdiff nums[i1] - nums[i];if( (prediff > 0 && curdif…...

多模态商品数据接口:融合图像、语音与文字的下一代商品详情体验

一、多模态商品数据接口的技术架构 &#xff08;一&#xff09;多模态数据融合引擎 跨模态语义对齐 通过Transformer架构实现图像、语音、文字的语义关联。例如&#xff0c;当用户上传一张“蓝色连衣裙”的图片时&#xff0c;接口可自动提取图像中的颜色&#xff08;RGB值&…...

IP如何挑?2025年海外专线IP如何购买?

你花了时间和预算买了IP&#xff0c;结果IP质量不佳&#xff0c;项目效率低下不说&#xff0c;还可能带来莫名的网络问题&#xff0c;是不是太闹心了&#xff1f;尤其是在面对海外专线IP时&#xff0c;到底怎么才能买到适合自己的呢&#xff1f;所以&#xff0c;挑IP绝对是个技…...

纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join

纯 Java 项目&#xff08;非 SpringBoot&#xff09;集成 Mybatis-Plus 和 Mybatis-Plus-Join 1、依赖1.1、依赖版本1.2、pom.xml 2、代码2.1、SqlSession 构造器2.2、MybatisPlus代码生成器2.3、获取 config.yml 配置2.3.1、config.yml2.3.2、项目配置类 2.4、ftl 模板2.4.1、…...

第7篇:中间件全链路监控与 SQL 性能分析实践

7.1 章节导读 在构建数据库中间件的过程中&#xff0c;可观测性 和 性能分析 是保障系统稳定性与可维护性的核心能力。 特别是在复杂分布式场景中&#xff0c;必须做到&#xff1a; &#x1f50d; 追踪每一条 SQL 的生命周期&#xff08;从入口到数据库执行&#xff09;&#…...

若依登录用户名和密码加密

/*** 获取公钥&#xff1a;前端用来密码加密* return*/GetMapping("/getPublicKey")public RSAUtil.RSAKeyPair getPublicKey() {return RSAUtil.rsaKeyPair();}新建RSAUti.Java package com.ruoyi.common.utils;import org.apache.commons.codec.binary.Base64; im…...