day2324 数组
文章目录
- 相关概念
- code
- ArrayTest08 数组拷贝
相关概念
day23课堂笔记
1、数组
1.1、数组的优点和缺点,并且要理解为什么。
第一:空间存储上,内存地址是连续的。
第二:每个元素占用的空间大小相同。
第三:知道首元素的内存地址。
第四:通过下标可以计算出偏移量。
通过一个数学表达式,就可以快速计算出某个下标位置上元素的内存地址,
直接通过内存地址定位,效率非常高。
优点:检索效率高。缺点:随机增删效率较低,数组无法存储大数据量。注意:数组最后一个元素的增删效率不受影响。1.2、一维数组的静态初始化和动态初始化静态初始化:int[] arr = {1,2,3,4};Object[] objs = {new Object(), new Object(), new Object()};动态初始化:int[] arr = new int[4]; // 4个长度,每个元素默认值0Object[] objs = new Object[4]; // 4个长度,每个元素默认值null1.3、一维数组的遍历for(int i = 0; i < arr.length; i++){System.out.println(arr[i]);}1.4、二维数组的静态初始化和动态初始化静态初始化:int[][] arr = {{1,2,34},{54,4,34,3},{2,34,4,5}};Object[][] arr = {{new Object(),new Object()},{new Object(),new Object()},{new Object(),new Object(),new Object()}};动态初始化:int[][] arr = new int[3][4];Object[][] arr = new Object[4][4];Animal[][] arr = new Animal[3][4];// Person类型数组,里面可以存储Person类型对象,以及Person类型的子类型都可以。Person[][] arr = new Person[2][2];....1.5、二维数组的遍历for(int i = 0; i < arr.length; i++){ // 外层for循环负责遍历外面的一维数组。// 里面这个for循环负责遍历二维数组里面的一维数组。for(int j = 0; j < arr[i].length; j++){System.out.print(arr[i][j]);}// 换行。System.out.println();}1.6、main方法上“String[] args”参数的使用(非重点,了解一下,以后一般都是有界面的,用户可以在界面上输入用户名和密码等参数信息。)1.7、数组的拷贝:System.arraycopy()方法的使用数组有一个特点:长度一旦确定,不可变。所以数组长度不够的时候,需要扩容,扩容的机制是:新建一个大数组,将小数组中的数据拷贝到大数组,然后小数组对象被垃圾回收。1.8、对数组中存储引用数据类型的情况,要会画它的内存结构图。
day24课堂笔记
1、解决昨天的两个作业题:
第一题:数组模拟栈。
第二题:酒店管理系统的模拟。
2、数组
2.1、常见的算法:排序算法:冒泡排序算法选择排序算法查找算法:二分法查找以上算法在以后的java实际开发中我们不需要使用的。因为java已经封装好了,直接调用就行。只不过以后面试的时候,可能会有机会碰上。2.2、算法实际上在java中不需要精通,因为java中已经封装好了,
要排序就调用方法就行。例如:java中提供了一个数组工具类:java.util.ArraysArrays是一个工具类。其中有一个sort()方法,可以排序。静态方法,直接使用类名调用就行。
3、冒泡排序:
参与比较的数据:9 8 10 7 6 0 11
第1次循环:
8 9 10 7 6 0 11 (第1次比较:交换)
8 9 10 7 6 0 11 (第2次比较:不交换)
8 9 7 10 6 0 11 (第3次比较:交换)
8 9 7 6 10 0 11 (第4次比较:交换)
8 9 7 6 0 10 11 (第5次比较:交换)
8 9 7 6 0 10 11 (第6次比较:不交换)
最终冒出的最大数据在右边:11
参与比较的数据:8 9 7 6 0 10
第2次循环:
8 9 7 6 0 10(第1次比较:不交换)
8 7 9 6 0 10(第2次比较:交换)
8 7 6 9 0 10(第3次比较:交换)
8 7 6 0 9 10(第4次比较:交换)
8 7 6 0 9 10(第5次比较:不交换)
参与比较的数据:8 7 6 0 9
第3次循环:
7 8 6 0 9(第1次比较:交换)
7 6 8 0 9(第2次比较:交换)
7 6 0 8 9(第3次比较:交换)
7 6 0 8 9(第4次比较:不交换)
参与比较的数据:7 6 0 8
第4次循环:
6 7 0 8(第1次比较:交换)
6 0 7 8(第2次比较:交换)
6 0 7 8(第3次比较:不交换)
参与比较的数据:6 0 7
第5次循环:
0 6 7(第1次比较:交换)
0 6 7(第2次比较:不交换)
参与比较的数据:0 6
第6次循环:
0 6 (第1次比较:不交换)
for(int i = 6; i > 0; i–){ // 6次
//7条数据比6次
//6条数据比5次
//5条数据比4次
//4条数据比3次
//3条数据比2次
//2条数据比1次
for(int j = 0; j < i; j++){
}
}
4、选择排序:
选择排序比冒泡排序的效率高。
高在交换位置的次数上。
选择排序的交换位置是有意义的。循环一次,然后找出参加比较的这堆数据中最小的,拿着这个最小的值和
最前面的数据“交换位置”。参与比较的数据:3 1 6 2 5 (这一堆参加比较的数据中最左边的元素下标是0)
第1次循环之后的结果是:
1 3 6 2 5 参与比较的数据:3 6 2 5 (这一堆参加比较的数据中最左边的元素下标是1)
第2次循环之后的结果是:
2 6 3 5 参与比较的数据:6 3 5 (这一堆参加比较的数据中最左边的元素下标是2)
第3次循环之后的结果是:
3 6 5 参与比较的数据:6 5 (这一堆参加比较的数据中最左边的元素下标是3)
第4次循环之后的结果是:
5 6注意:5条数据,循环4次。
5、二分法查找(折半查找):
第一:二分法查找建立在排序的基础之上。
第二:二分法查找效率要高于“一个挨着一个”的这种查找方式。
第三:二分法查找原理?10(0下标) 23 56 89 100 111 222 235 500 600(下标9) arr数组目标:找出600的下标(0 + 9) / 2 --> 4(中间元素的下标)arr[4]这个元素就是中间元素:arr[4]是 100100 < 600说明被查找的元素在100的右边。那么此时开始下标变成:4 + 1(5 + 9) / 2 --> 7(中间元素的下标)arr[7] 对应的是:235235 < 600说明被查找的元素在235的右边。开始下标又进行了转变:7 + 1(8 + 9) / 2 --> 8arr[8] --> 500500 < 600开始元素的下标又发生了变化:8 + 1(9 + 9) / 2 --> 9arr[9]是600,正好和600相等,此时找到了。
6、介绍一下java.util.Arrays工具类。
所有方法都是静态的,直接用类名调用
主要使用的是两个方法:
二分法查找,排序
以后要看文档,不要死记硬背。
code
ArrayTest08 数组拷贝
package com.bjpowernode.javase.array;/*** 关于一维数组的扩容。* 在java开发中,数组长度一旦确定不可变,那么数组满了怎么办?* 数组满了,需要扩容。* java中对数组的扩容是:* 先新建一个大容量的数组,然后将小容量数组中的数据一个一个拷贝到大数组当中。** 结论:数组扩容效率较低。因为涉及到拷贝的问题。所以在以后的开发中请注意:尽可能少的进行数组的拷贝。* 可以在创建数组对象的时候预估计以下多长合适,最好预估准确,这样可以减少数组的扩容次数。提高效率。*/
public class ArrayTest08 {public static void main(String[] args) {// java中的数组是怎么进行拷贝的呢?//System.arraycopy(5个参数);// 拷贝源(从这个数组中拷贝)int[] src = {1, 11, 22, 3, 4};// 拷贝目标(拷贝到这个目标数组上)int[] dest = new int[20]; // 动态初始化一个长度为20的数组,每一个元素默认值0// 调用JDK System类中的arraycopy方法,来完成数组的拷贝//System.arraycopy(src, 1, dest, 3, 2);// 遍历目标数组/*for (int i = 0; i < dest.length; i++) {System.out.println(dest[i]); // 0 0 0 11 22 ... 0}*/System.arraycopy(src, 0, dest, 0, src.length);for (int i = 0; i < dest.length; i++) {System.out.println(dest[i]);}// 数组中如果存储的元素是引用,可以拷贝吗?当然可以。String[] strs = {"hello", "world!", "study", "java", "oracle", "mysql", "jdbc"};String[] newStrs = new String[20];System.arraycopy(strs, 0, newStrs, 0, strs.length);for (int i = 0; i < newStrs.length; i++) {System.out.println(newStrs[i]);}System.out.println("================================");Object[] objs = {new Object(), new Object(), new Object()};Object[] newObjs = new Object[5];// 思考一下:这里拷贝的时候是拷贝对象,还是拷贝对象的地址。(地址。)System.arraycopy(objs, 0, newObjs, 0, objs.length);for (int i = 0; i < newObjs.length; i++) {System.out.println(newObjs[i]);}}
}相关文章:
day2324 数组
文章目录相关概念codeArrayTest08 数组拷贝相关概念 day23课堂笔记 1、数组 1.1、数组的优点和缺点,并且要理解为什么。 第一:空间存储上,内存地址是连续的。 第二:每个元素占用的空间大小相同。 第三:知道首元素的内…...
【Python实战】神仙运气—快看看你的彩票:2千多万元大奖无人领,马上就过期了,下一期的中奖者会是你吗?(纯技术交流)
前言 越努力越幸运 哈喽~我是栗子同学! 特别注意:不管是沉迷赌球,还是沉迷购彩,都是不可取的。本文纯是一个技术学习内容。 听说关注我的人会暴富哦!、 所有文章完整的素材源码都在👇👇 粉丝…...
2023年上半年软考高项信息系统项目管理师2月25日开班
信息系统项目管理师是全国计算机技术与软件专业技术资格(水平)考试(简称软考)项目之一,是由国家人力资源和社会保障部、工业和信息化部共同组织的国家级考试,既属于国家职业资格考试,又是职称资…...
数据库(第一天)
文档信息 文档类别正式文档文档编号数据库基础课 1.2-001版本1.2-001文档名称数据库基础课编写负责人/编写时间梁昭东/2023 年 1 月 30 日审核负责人/审核时间年 月 日批准人/批准时间年 月 日 变更记录 日期版本号变更内容修订者2023.01.30v1.2版根据实际情况增删了部分内容…...
一文了解 ArrayList 的扩容机制
了解 ArrayList 在 Java 中常用集合类之间的关系如下图所示: 从图中可以看出 ArrayList 是实现了 List 接口,并是一个可扩容数组(动态数组),它的内部是基于数组实现的。它的源码定义如下: public class A…...
牛态已成选股源码
{牛态已成} {条件选股} {其他类型} N:7; A1:(REF(H,N) HHV(H,((2 * N) 1))); B1:FILTER(A1,N); C1:BACKSET(B1,(N 1)); D1:FILTER(C1,N); A2:(REF(L,N) LLV(L,((2 * N) 1))); B2:FILTER(A2,N); C2:BACKSET(B2,(N 1)); D2:FILTER(C2,N); E1:((REF(LLV(L,(2 * N)),1) REF(…...
Python基础
Python 是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。Python 的设计具有很强的可读性,相比其他语言经常使用英文关键字,其他语言的一些标点符号,它具有比其他语言更有特色语法结构。小编也整理了一套关于学习Python入门…...
浅显易懂的说清楚小游戏与H5游戏的技术区别
从“跳一跳”到“羊了个羊”微信小游戏上线4年时间,除了涌现出不少火爆全网的小游戏之外,也有类似于“动物餐厅”、“口袋奇兵”等游戏得以在此孵化繁荣,凭借着微信强大的社交属性小游戏成为游戏厂商在桌面端、App 端、H5 端之外争夺的另一个…...
【Python入门第七天】Python 数字
Python 数字 Python 中有三种数字类型: intfloatcomplex 为变量赋值时,将创建数值类型的变量: 实例 x 10 # int y 6.3 # float z 2j # complex如需验证 Python 中任何对象的类型,请使用 type() 函数: 实…...
Python自动化测试 软件测试最全教程(附笔记),看完可就业
最近看到很多粉丝在后台私信我,叫我做一期Python自动化测试的教程,其实关于这个问题,我也早就在着手准备了,我录制了一整套完整的Python自动化测试的教程,都上传在B站上面,大家有兴趣的可以去看一下&#x…...
Windows 安装Tomcat
版本:tomcat8.5jdk-8u231一.解压JDK安装包 更换JDK安装路径二.解压安装Tomcat 选择jdk安装路径更换tomcat安装路径三.设置环境变量 1.“环境变量”界面中系统变量点击”新建“,创建CATALINA_HOMEC:\RESSET\tomcat(Tomcat服务器的根目录)2.创建…...
知识图谱业务落地技术推荐之图数据库汇总
0.图数据库排名 链接:https://db-engines.com/en/ranking/graph+dbms 0.1简要分析(各种图数据库属性) Neo4j(主流) 历史悠久且...
2023新华为OD机试题 - 最小传递延迟(JavaScript) | 刷完必过
最小传递延迟 题目 通讯网络中有N个网络节点 用1 ~ N进行标识 网络通过一个有向无环图进行表示 其中图的边的值,表示节点之间的消息传递延迟 现给定相连节点之间的延时列表times[i]={u,v,w} 其中u表示源节点,v表示目的节点,w表示u和v之间的消息传递延时 请计算给定源节点到…...
SpringMVC基础入门(一)之理论基础概念
文章目录SpringMVC1.概念2.常用注解请求与响应1.请求参数2.JSON传输3.常用注解响应1.响应页面2.响应JSON数据Rest风格1.介绍2.常用注解SpringMVC 1.概念 (1)定义 SpringMVC是一种基于Java实现MVC模型的轻量级Web框架。 (2)为什…...
前端知识点
一. slice和splice区别: 1.splice改变原数组,slice不改变原数组。 2.splice除了可以删除之外,还可以插入。 3.splice可传入3个参数,slice接受2个参数。slice(start,end):方法可从已有数组中返回选定的元素,…...
【docker知识】从容器中如何访问到宿主机
一、说明 使用 Docker 能实现服务的容器化,并使用容器间网络在它们之间进行通信。有时您可能需要一个容器来与宿主机上非容器化的服务通信。以下是如何从 Docker 容器中访问本地主机或 127.0.0.1的具体方法。 二、方法1:简单的选择 适用于 Windows 和 Ma…...
MySQL入门篇-MySQL常用流程控制函数小结
备注:测试数据库版本为MySQL 8.0 这个blog我们来聊聊常见的流程控制函数 如需要scott用户下建表及录入数据语句,可参考:scott建表及录入数据sql脚本 流程控制函数 函数名函数用途CASEcase语句用于条件判断if()if/else条件判断ifnull()null数据处理nullif()retur…...
大数据技术架构(组件)35——Spark:Spark Streaming(1)
2.3、Spark Streaming2.3.0、OverviewSpark Streaming 是核心 Spark API 的扩展,它支持实时数据流的可扩展、高吞吐量、容错流处理。数据可以从许多来源(如 Kafka、Kinesis 或 TCP 套接字)获取,并且可以使用复杂的算法进行处理&am…...
实现超大文件上传逻辑
引言 文件上传功能是我们开发中经常会遇到的功能点,当日常开发中遇到小文件(比如:头像),可以直接将文件转为字节流直接上传到服务器上即可。但是当遇到大文件这种(比如:一部电影至少1个G)该怎么…...
JavaScript HTML DOM EventListener
JavaScript HTML DOM EventListener 是一个非常重要的概念,在前端开发中被广泛使用。它是用来监听 HTML DOM 上的事件,并执行特定的代码块。 EventListener 的语法非常简单,下面是一个示例代码: element.addEventListener("…...
AzurLaneAutoScript:如何用智能自动化脚本彻底解放你的碧蓝航线时间?
AzurLaneAutoScript:如何用智能自动化脚本彻底解放你的碧蓝航线时间? 【免费下载链接】AzurLaneAutoScript Azur Lane bot (CN/EN/JP/TW) 碧蓝航线脚本 | 无缝委托科研,全自动大世界 项目地址: https://gitcode.com/gh_mirrors/az/AzurLane…...
如何在Windows上轻松安装ViGEmBus虚拟手柄驱动解决游戏兼容性问题
如何在Windows上轻松安装ViGEmBus虚拟手柄驱动解决游戏兼容性问题 【免费下载链接】ViGEmBus Windows kernel-mode driver emulating well-known USB game controllers. 项目地址: https://gitcode.com/gh_mirrors/vi/ViGEmBus 你是否曾经遇到过这样的困扰:手…...
全球化技术团队协作:跨越文化差异的沟通与管理实践
1. 从“理所当然”到“文化自觉”:全球化职场的思维转型在电子设计自动化(EDA)和半导体行业摸爬滚打了十几年,我参与过跨国项目,也带过分布在全球各地的团队。一个深刻的体会是,我们这些搞技术的࿰…...
从‘不好用的CE’到‘好用的OD’:一次逆向实战中的工具选择与思路转换
逆向工程实战:从工具局限到思维跃迁的破解之道 当那个MFC程序弹出第一个窗口时,我习惯性地打开了Cheat Engine——这个在游戏修改领域堪称神器的工具。但十分钟后,面对毫无进展的扫描结果和不断跳出的错误提示,我突然意识到&#…...
从「LLM 使用者」到「LLM 驾驭者」:小白程序员必备的大模型核心知识体系与实战指南(收藏版)
本文将从底层原理、工程落地、应用优化三个维度,系统拆解大语言模型的核心知识体系,既保证技术深度,又用通俗的语言和实战案例降低理解门槛,适合所有想要从「LLM 使用者」进阶为「LLM 驾驭者」的读者。 一、LLM 核心原理入门&…...
高速PCB设计:信号完整性与电磁场思维实战解析
1. 高速PCB设计的核心挑战与设计思维转变十年前我刚接触高速PCB设计时,曾天真地认为只要把线连通就能工作。直到某次设计的DDR3内存模块在800MHz频率下频繁出错,才真正理解到:当信号上升时间进入亚纳秒级,PCB上的每毫米走线都成为…...
开关电源传导共模噪声抑制:Y电容原理、安规限制与EMI滤波器设计
1. 项目概述:理解隔离式开关电源中的传导共模噪声在开发离线式开关电源,比如我们常见的手机充电器、笔记本电脑适配器或者工业电源模块时,工程师们常常会遇到一个既棘手又必须解决的难题:传导电磁干扰(Conducted EMI&a…...
Podgrab源码架构分析:深入理解Go语言播客管理工具的设计原理
Podgrab源码架构分析:深入理解Go语言播客管理工具的设计原理 【免费下载链接】podgrab A self-hosted podcast manager/downloader/archiver tool to download podcast episodes as soon as they become live with an integrated player. 项目地址: https://gitco…...
OpenClaw AI人格守护插件:基于记忆差异分析实现智能体人格稳定
1. 项目概述:一个为AI人格注入“记忆锚点”的守护插件如果你和我一样,长期在AI应用开发的一线,特别是围绕OpenClaw这类框架构建具有“人格”的智能体,那你一定遇到过这个令人头疼的经典问题:AI的人格会“漂移”。今天你…...
孤舟笔记 IO 与网络编程篇五 网络编程你真的懂吗?从Socket到TCP连接全解析
文章目录一、先说结论:网络编程核心事实二、TCP 编程:三次握手的 Socket 视角三、UDP 编程:无连接的数据报四、服务端线程模型演进模型一:一连接一线程(最原始)模型二:线程池(改进&a…...
