day10_复习_数组_方法
非常重要的: 方法设计(参数,返回值,调用)
数组也重要,但是后续很少用! 是因为后期有更简单的【集合】,重要在于是一种思想,也是一种代码逻辑
关于数组:
- 声明创建
- 取值,存值
- 遍历
- 面试|算法 --> 排序
- 内存图(堆,栈,引用)
今天
- 数组工具类:Arrays
- 数组扩容(拷贝)
- 作业
一、Arrays
Arrays , 数组工具类, 主要提供一系列操作数组的方法,常用的
- String toString(数组参数) 将数组的元素以字符串的形式返回(
将数组转成字符串后返回
)- void sort(数组参数), 将数组按照升序排序
- copy
package com.qf.array;import java.util.Arrays;/*** @desc*/
public class Demo1 {public static void main(String[] args) {// 数组声明创建方式1int[] arr1 = new int[3];// int arr2[];// 语法不错,但是不建议// 数组声明创建方式2int[] arr2 = new int[]{1,2,3,4};// 数组声明创建方式3int[] arr3 = {1,2,3,4};/*** 使用数组工具类,用法* 返回值 = 类名.方法名(参数)*------------------------------* toString方法,作用是将数组以字符串形式返回*-----------------------------* 作用:* 主要用来遍历数组元素,方便查看*/// String s = Arrays.toString(arr3);// System.out.println(s );System.out.println( "遍历" + Arrays.toString(arr3));/*** Arrays工具第二个常用方法* void sort(数组),作用是将数组按照升序排序*/int[] arr4 = {5,2,3,1,4};// 排序前遍历一遍,看效果System.out.println("排序前: "+Arrays.toString(arr4));// 调用方法完成排序Arrays.sort(arr4);System.out.println("排序后: "+Arrays.toString(arr4));}
}
二、数组扩容
数组特点是长度固定,那还怎么扩容?
- 为什么扩容? 因为装不下
- 怎么扩? 其实是重新创建一个大一点(一般是1.5倍,2倍)的数组,将之前数组的元素拷贝到新的数组
三、拷贝
3.1 手动
思路
- 手动创建一个数组(假定原数组2倍长度)
- 遍历老数组取出元素,挨个存储到新数组
package com.qf.array;import java.util.Arrays;/*** @desc 数组扩容+拷贝*/
public class Demo2 {public static void main(String[] args) {// 现有数组int[] arr = {1,2,3,4,5};System.out.println("扩容前: " + Arrays.toString(arr) );// 继续往里存储数据,但是存储不了// arr[5] = 6; // 报错,越界// 现在想将数组扩容,后再存储arr = copy1(arr);arr[5] = 6;System.out.println("扩容后: " + Arrays.toString(arr) );}// 需求: 将数组长度扩大2倍// 拷贝方式1: 手动实现public static int[] copy1(int[] arr) {// 创建一个新数组是原来的2倍int[] arr2 = new int[arr.length * 2];// System.out.println("拷贝前: " + Arrays.toString(arr2) );// 开始拷贝for (int i = 0; i < arr.length; i++) {// 取出老数组中的元素赋值给新数组arr2[i] = arr[i];}// System.out.println("拷贝后: " + Arrays.toString(arr2) );return arr2;}
}
3.2 System工具【重要】
package com.qf.array;import java.util.Arrays;/*** @desc 数组扩容+拷贝(工具实现)*/
public class Demo3 {public static void main(String[] args) {// 现有数组int[] arr = {1,2,3,4,5};System.out.println("扩容前: " + Arrays.toString(arr) );// 继续往里存储数据,但是存储不了// arr[5] = 6; // 报错,越界// 现在想将数组扩容,后再存储arr = copy(arr);// 将新数组地址值覆盖给变量// 即arr现在指向新的数组arr[5] = 6;System.out.println("扩容后: " + Arrays.toString(arr) );}public static int[] copy(int[] arr) {/*** 现在使用jdk自带工具方法完成数组拷贝* 参数1: src,资源(原始、源),即原数组* 参数2: srcPos,原始数组位置* 参数3: dest,目的地即新数组* 参数4: destPos,新数组位置* 参数5: length,长度即拷贝的元素个数** 从原数组的指定位置拷贝指定个数到新数组指定位置*/int[] arr2 = new int[arr.length * 2];System.arraycopy(arr,0,arr2,0,arr.length);return arr2;// 返回的是新数组的地址值}
}
3.3 Arrays工具
public class Demo4 {public static void main(String[] args) {// 现有数组int[] arr = {1,2,3,4,5};System.out.println("扩容前: " + Arrays.toString(arr) );// 继续往里存储数据,但是存储不了// arr[5] = 6; // 报错,越界// 现在想将数组扩容,后再存储/*** Arrays提供的方法* copyOf方法内部创建了新数组,长度是指定长度* 而且还会将之前老数组的元素拷贝到新数组* 最后将新数组的地址值返回给变量arr* 即arr指向最新的数组*/arr = Arrays.copyOf(arr,arr.length*2);arr[5] = 6;System.out.println("扩容后: " + Arrays.toString(arr) );}
}
四、作业
题19
请创建一个长度为5的整数数组,并为数组中的元素赋值。遍历数组,打印所有元素,元素之间用空格隔开。比如:
数组为:1,2,3,4,5
打印结果:[1,2,3,4,5]
public static void main(String[] args) {int[] arr = {11, 22, 33, 44, 55};String s = toStrPro(arr);System.out.println(s );Arrays.toString(arr);}// 请创建一个长度为6的整数数组,并为数组中的元素赋值。遍历数组,打印所有元素,元素之间用空格隔开。比如:// 数组为:1,2,3,4,5// 打印结果:[1,2,3,4,5]public static void toStr(int[] arr) {System.out.print("[");for (int i = 0; i < arr.length; i++) {if (i == arr.length - 1) {// 是不是最后一个System.out.print(arr[i] + "]");} else {System.out.print(arr[i] + ",");}}}// 模拟Arrays.toString()方法,将数组元素以字符串形式返回public static String toStrPro(int[] arr) {String s = "[";for (int i = 0; i < arr.length; i++) {if (i == arr.length - 1) {// 是不是最后一个s += arr[i] + "]";} else {s += arr[i] + ",";}}return s;// "[1,2,3]"}
题目23
写一个方法 用于合并两个int类型的数组 合并法则如下{1,2,5,8,9}{1,3,0}---->{1,2,5,8,9,1,3,0} (合并)
public static void main(String[] args) {int[] arr1 = {1,2,5,8,9};int[] arr2 = {1,3,0,6,10};int[] arr3 = concatArray(arr1,arr2);System.out.println(Arrays.toString(arr3) );}/*** 扩展知识:* 整型默认值: 0* 浮点型默认值: 0.0* char默认值: ' '* boolean默认值: false* ---* 引用类型: 数组,类,接口* 引用类型的默认初始值都是null*/// {1,2,5,8,9}{1,3,0}---->{1,2,5,8,9,1,3,0} (合并)public static int[] concatArray(int[] arr1, int[] arr2) {// 创建新数组,存储所有元素int[] arr3 = new int[arr1.length + arr2.length];// 方式1// for (int i = 0; i < arr1.length; i++) {// arr3[i] = arr1[i];// }// for (int i = 0; i < arr2.length; i++) {// arr3[arr1.length+i] = arr2[i];// }// 方式2// for (int i = 0; i < arr3.length; i++) {// if (i < arr1.length) {// arr3[i] = arr1[i];// } else {// arr3[i] = arr2[i - arr1.length];// }// }// 方式3System.arraycopy(arr1,0,arr3,0,arr1.length);System.arraycopy(arr2,0,arr3,arr1.length,arr2.length);return arr3;}
题目24
写一个方法 用于合并两个int类型的数组 合并法则如下{1,2,5,3,8,9}{1,3,0}---->{0,1,1,2,3,3,5,8,9} (合并并排序不需要去重)
public static void main(String[] args) {int[] arr1 = {1,2,5,8,9};int[] arr2 = {1,3,0,6,10};int[] arr3 = concatSortArray(arr1,arr2);System.out.println(Arrays.toString(arr3) );}// 合并并排序// {1,2,5,3,8,9}{1,3,0}---->{0,1,1,2,3,3,5,8,9} (合并并排序不需要去重)public static int[] concatSortArray(int[] arr1, int[] arr2) {// 创建新数组,存储所有元素int[] arr3 = new int[arr1.length + arr2.length];System.arraycopy(arr1,0,arr3,0,arr1.length);System.arraycopy(arr2,0,arr3,arr1.length,arr2.length);Arrays.sort(arr3);return arr3;}
题目25
写一个方法 用于合并去重两个int类型的数组 合并法则如下{1,2,5,3,8,9}{1,3,0}---->{0,1,2,3,5,8,9} (合并并排序需要去重)
public static void main(String[] args) {int[] arr1 = {1,2,5};int[] arr2 = {1,6,2,3,10};int[] arr3 = concatSortDistinctArray(arr1,arr2);System.out.println(Arrays.toString(arr3) );}// 写一个方法 用于合并去重两个int类型的数组 合并法则如下// {1,2,5,3,8,9}{1,3,0}---->{0,1,2,3,5,8,9} (合并并排序需要去重)public static int[] concatSortDistinctArray(int[] arr1, int[] arr2) {// 创建新数组,合并所有元素int[] arr3 = new int[arr1.length + arr2.length];System.arraycopy(arr1,0,arr3,0,arr1.length);System.arraycopy(arr2,0,arr3,arr1.length,arr2.length);// 排序Arrays.sort(arr3);// 去重// [0,1,1,2,3,5,8,9] --> [0,1,2,3,5,8,9]/*** 要新建数组存储去重后的元素* 利用极值思想,那就创建一个根原数组一样大的数组存储*/int[] arr4 = new int[arr3.length];int index = 0;for (int i = 0; i < arr3.length; i++) {int e = arr3[i];boolean flag = false;// 判断是否有重复元素的标志,false是没有重复元素for (int j = 0; j < arr4.length; j++) {if (e == arr4[j]) {flag = true;// 有重复,标志改动break;}}if (!flag) {arr4[index] = e;index++;}}// 只存储不重复的元素int[] arr5 = new int[index];System.arraycopy(arr4,0,arr5,0,index);return arr5;}
相关文章:

day10_复习_数组_方法
非常重要的: 方法设计(参数,返回值,调用) 数组也重要,但是后续很少用! 是因为后期有更简单的【集合】,重要在于是一种思想,也是一种代码逻辑 关于数组: 声明创建取值,存值遍历面试|算法 --> 排序内存图(堆,栈,引用) 今天 数组工具类:Arrays数组扩容(拷…...

Linux:TCP三握四挥简析
文章目录 1. 前言2. 背景3. TCP连接的建立和断开3.1 TCP协议状态机3.2 TCP的三握四挥3.2.1 TCP 连接建立的三次握手过程分析3.2.1.1 服务端和客户端套接字的创建3.2.1.2 服务端进入 LISTEN 状态3.2.1.3 服务端在 LISTEN 状态等待客户端的 SYN 请求3.2.1.4 客户端向服务端发送 S…...
2023年全球市场数字干膜测量仪总体规模、主要生产商、主要地区、产品和应用细分研究报告
内容摘要 按收入计,2022年全球数字干膜测量仪收入大约149.2百万美元,预计2029年达到191.6百万美元,2023至2029期间,年复合增长率CAGR为 3.6%。同时2022年全球数字干膜测量仪销量大约 ,预计2029年将达到 。2022年中国市…...
Python爬虫脚本的基本组成
一个基本的Python爬虫脚本通常由以下几部分组成: 导入必要的库:Python中有许多库可用于爬虫,如requests用于发送HTTP请求,BeautifulSoup用于解析HTML或XML,selenium用于模拟浏览器操作等。你需要根据你的需求导入相应…...

IIS部署Flask
启用 CGI 安装wfastcgi pip install wfastcgi 启用 wfastcgi 首先以管理员身份运行wfastcgi-enable来在IIS上启用wfastcgi,这个命令位于c:\python_dir\scripts,也就是你需要确保此目录在系统的PATH里,或者你需要cd到这个目录后再执行。 #…...

告警繁杂迷人眼,多源分析见月明
随着数字化浪潮的蓬勃兴起,网络安全问题日趋凸显,面对指数级增长的威胁和告警,传统的安全防御往往力不从心。网内业务逻辑不规范、安全设备技术不成熟都会导致安全设备触发告警。如何在海量众多安全告警中识别出真正的网络安全攻击事件成为安…...
【Python】概述
【Python】概述 特点 Python 是一种面向对象、解释性、弱类型(动态数据类型)的脚本语言(高级程序设计语言)。 由于Python是解释型语言,所以具有跨平台特性。 解释型语言: 这意味着开发过程中没有了编译…...
MySQL运维之日志管理
目录 一、日志 1.1错误日志 1.2二进制日志 1.2.1格式 1.2.2查看 1.2.3删除 1.3查询日志...

Yolov5 ONNX导出报错: export failure: Unsupported ONNX opset version: 17
目录 1.问题描述 1.1 报错1 : 1.2 报错 2 2.解决方案 介绍 ONNX(Open Neural Network Exchange)是一个用于机器学习模型的开放式标准,它旨在使不同的深度学习框架能够将训练好的模型在不同平台上无缝运行。它是由Microsoft和F…...
2023年全球市场儿科PICC导管总体规模、主要生产商、主要地区、产品和应用细分研究报告
内容摘要 按收入计,2022年全球儿科PICC导管收入大约 百万美元,预计2029年达到 百万美元,2023至2029期间,年复合增长率CAGR为 %。同时2022年全球儿科PICC导管销量大约 ,预计2029年将达到 。2022年中国市场规模大约为 百…...
Adler-32算法使用Neon优化
1、简单实现 下面代码是Adler-32算法的简单实现,我们来整理一下这段代码的逻辑: A = 1 + D1 + D2 + ... + Dn (mod 65521)B = (1 + D1) + (1 + D1 + D2) + ... + (1 + D1 + D2 + ... + Dn) (mod 65521)= nxD1 + (n-1) x D2 + (n-2) x D3 + ... + Dn + n (mod 65521)Adler-3…...

数据结构-----平衡二叉树
目录 前言 1.平衡二叉树 1.1概念与特点 1.2与二叉排序树比较 1.3判断平衡二叉树 2.平衡二叉树的构建 2.1平衡因子 BF 2.2 LL型失衡(右旋) 2.3 RR型失衡(左旋) 2.4 LR型失衡(先左旋再右旋) 2.5 RL…...
vue3 keepalive翻页保存页面状态
描述 实现页面 A-> B , B->A(A保存之前页面状态,不刷新页面) // router/index.tsimport { createRouter, createWebHistory } from vue-router import HomeView from ../views/HomeView.vueconst router createRouter({h…...

测试工程师思维学习
一、测试工程师应具备什么思维? 透过现象看本质,拒绝“一叶障目” 01、质疑和系统思维 02、创新思维 03、全局思维 04、风险驱动和组合思维 05、用户为中心和比较思维 06、BT思维和架构扩展性思维 二、测试工程师应避免的思维 01、同化现象 02、定位效…...

前端JavaScript入门到精通,javascript核心进阶ES6语法、API、js高级等基础知识和实战 —— Web APIs(六)
思维导图 一、正则表达式 1.1正则表达式介绍 1.2 语法 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewpor…...
云硬盘和物理硬盘的区别
服务器的硬盘是服务器用来存储数据,一般有云硬盘和物理硬盘两种。云硬盘是云计算平台的虚拟技术的存储服务,将数据存储于云端通过分布式存储架构的形式。物理硬盘是将数据存储在服务器或者是PC端上,存储空间比较大,读写速度也很快…...
数据分析--观察数据处理异常值
引包: import pandas as pd import numpy as np 读取文件: dfpd.read_csv(./HR.csv) 文件见绑定资源(来自kaggle的HR.csv) 处理过程: 一、从df中拿出处理对象 二、找出缺失值的位置并删除 s1_sdf[satisfactio…...

vue3+elementPlus el-input的type=“number“时去除右边的上下箭头
改成 代码如下 <script lang"ts" setup> import {ref} from vue const inputBtn ref() </script> <template><el-input type"number" v-model"inputBtn" style"width: 80px;" class"no_number">…...

华为云云耀云服务器L实例评测|Elasticsearch的可视化Kibana工具安装 IK分词器的安装和使用
前言 最近华为云云耀云服务器L实例上新,也搞了一台来玩,期间遇到各种问题,在解决问题的过程中学到不少和运维相关的知识。 本篇博客介绍Elasticsearch的可视化Kibana工具安装,以及IK分词器的安装和使用。 其他相关的Elasticsea…...
加密货币交易技巧——人和(一)
交易原则 本篇主要讲述加密货币交易人需要注意的几个原则。 1.不能贪心,具体表现在做好仓位管理。第一,不要重仓进去,一定要轻仓。第二,开仓就想好本次要赚多少钱,不要太贪,到了预期点就止盈。第三&am…...
React hook之useRef
React useRef 详解 useRef 是 React 提供的一个 Hook,用于在函数组件中创建可变的引用对象。它在 React 开发中有多种重要用途,下面我将全面详细地介绍它的特性和用法。 基本概念 1. 创建 ref const refContainer useRef(initialValue);initialValu…...
土地利用/土地覆盖遥感解译与基于CLUE模型未来变化情景预测;从基础到高级,涵盖ArcGIS数据处理、ENVI遥感解译与CLUE模型情景模拟等
🔍 土地利用/土地覆盖数据是生态、环境和气象等诸多领域模型的关键输入参数。通过遥感影像解译技术,可以精准获取历史或当前任何一个区域的土地利用/土地覆盖情况。这些数据不仅能够用于评估区域生态环境的变化趋势,还能有效评价重大生态工程…...

C++使用 new 来创建动态数组
问题: 不能使用变量定义数组大小 原因: 这是因为数组在内存中是连续存储的,编译器需要在编译阶段就确定数组的大小,以便正确地分配内存空间。如果允许使用变量来定义数组的大小,那么编译器就无法在编译时确定数组的大…...

uniapp 开发ios, xcode 提交app store connect 和 testflight内测
uniapp 中配置 配置manifest 文档:manifest.json 应用配置 | uni-app官网 hbuilderx中本地打包 下载IOS最新SDK 开发环境 | uni小程序SDK hbulderx 版本号:4.66 对应的sdk版本 4.66 两者必须一致 本地打包的资源导入到SDK 导入资源 | uni小程序SDK …...

MySQL:分区的基本使用
目录 一、什么是分区二、有什么作用三、分类四、创建分区五、删除分区 一、什么是分区 MySQL 分区(Partitioning)是一种将单张表的数据逻辑上拆分成多个物理部分的技术。这些物理部分(分区)可以独立存储、管理和优化,…...

实战三:开发网页端界面完成黑白视频转为彩色视频
一、需求描述 设计一个简单的视频上色应用,用户可以通过网页界面上传黑白视频,系统会自动将其转换为彩色视频。整个过程对用户来说非常简单直观,不需要了解技术细节。 效果图 二、实现思路 总体思路: 用户通过Gradio界面上…...
在鸿蒙HarmonyOS 5中使用DevEco Studio实现指南针功能
指南针功能是许多位置服务应用的基础功能之一。下面我将详细介绍如何在HarmonyOS 5中使用DevEco Studio实现指南针功能。 1. 开发环境准备 确保已安装DevEco Studio 3.1或更高版本确保项目使用的是HarmonyOS 5.0 SDK在项目的module.json5中配置必要的权限 2. 权限配置 在mo…...
flow_controllers
关键点: 流控制器类型: 同步(Sync):发布操作会阻塞,直到数据被确认发送。异步(Async):发布操作非阻塞,数据发送由后台线程处理。纯同步(PureSync…...
深度解析:etcd 在 Milvus 向量数据库中的关键作用
目录 🚀 深度解析:etcd 在 Milvus 向量数据库中的关键作用 💡 什么是 etcd? 🧠 Milvus 架构简介 📦 etcd 在 Milvus 中的核心作用 🔧 实际工作流程示意 ⚠️ 如果 etcd 出现问题会怎样&am…...

高端性能封装正在突破性能壁垒,其芯片集成技术助力人工智能革命。
2024 年,高端封装市场规模为 80 亿美元,预计到 2030 年将超过 280 亿美元,2024-2030 年复合年增长率为 23%。 细分到各个终端市场,最大的高端性能封装市场是“电信和基础设施”,2024 年该市场创造了超过 67% 的收入。…...