java数组讲解

前言:

由上两章,我们已经了解关于java的基础语法,这章我们将讲解数组的相关语法,坐好了没,我们准备要发车啦!!!

我们将从五部分给大家讲解:

1数组的基本概念

2.数组是引用类型

3.数组的应用场景

4.数组的练习

5.二维数组

1数组的基本概念:

1.1  为什么要使用数组

1.存储多个相同类型的数据

仓库允许你存储多个相同类型的元素,例如一个整数、字符串或对象。使用仓库可以报表避免多个独立的变量,并让你更方便地管理这些数据。例如,假设你需要存储10个学生的成绩,用储备可以简化操作:

注意:当我们使用第二个方法时,相当于声明了10个独立的变量,而使用数组则不是声明10个独立的变量。它能更好的帮我们处理多组数据,方便我们操作。

2.内存使用情况

磁盘在内存中是分配的,这使得它在存储和访问数据时非常高效。磁盘的元素相互独立,因此磁盘元素的索引访问时间是分散的时间(即O(1)),这意味着无论磁盘有多少,访问任何元素的速度都是相同的。

3.方便数据管理

数据库通过索引访问,让您轻松检索或更新每个元素。满足循环语句,数据库可以处理大量数据,而不需要手动处理每个元素。

4.代码简洁且可维护性

配额可以让代码更简洁、更容易维护。通过将数据备份到一个配额中,您可以减少不必要的重复代码,并且更容易进行批量操作。例如,您可以初始化配额配额中的所有元素,或者通过循环修改它们。

5.易于进行批量操作

批量在处理批量数据时非常有用,尤其是在需要对一组元素进行排序、查找或批量修改时。例如,你可以通过批量对数据进行排序或过滤,并且能够使用标准库函数(如Arrays.sort())来简化常见操作。

6.固定大小的设计

数据库的大小在初始化时是固定的。固定大小的特点使得它在处理已知数量的数据时非常有效,例如当你知道这种要存储多少个元素时,数据库是一个不错的选择。它也有助益于减少不必要的内存分配。

7.支持多维数据显示

数据库支持多维结构,尤其是用于表示矩阵、图像、图表等多维数据。例如,二维数据库非常适合表示矩阵或表格结构:

8.可与标准库结合使用

Java提供了大量与数据库相关的标准库方法(如排序、拷贝、搜索等),这使得数据库的使用更加方便。通过这些工具类,数据库操作变得更加简单和高效。

总结

使用数组有以下几个主要优势:

  • 存储多个相同类型的数据:为每个数据单独声明。
  • 高效的内存管理:内存在内存中连续存储,访问速度快。
  • 简化代码:使用集群可以避免重复代码,易于管理。
  • 批量操作方便:批量支持循环遍历、批量修改、排序等操作。
  • 支持多维结构:可以表示复杂的数据结构,如矩阵。
  • 固定大小:适合处理已知大小的数据。

1.2 什么是数组

数组:可以看成是相同类型元素的一个集合,在内存中是一段连续的空间。

【注意事项】

1. 数组中存放的元素其类型相同

2. 数组的空间是连在一起的

3. 每个空间有自己的编号,其实位置的编号为0,即数组的下标。

1.3 数组的创建及初始化

1. 动态初始化:在创建数组时,直接指定数组中元素的个数

int[] array = new int[10];

2. 静态初始化:在创建数组时不直接指定数据元素个数,而直接将具体的数据内容进行指定

使用方法:

T(数据类型)[ ] = {data1,data2,data3}

【注意事项】

静态初始化虽然没有指定数组的长度,编译器在编译时会根据{}中元素个数来确定数组的长度。

静态初始化时, {}中数据类型必须与[]前数据类型一致。

静态初始化可以简写,省去后面的new T[]。

数组也可以按照如下C语言个数创建,不推荐

静态和动态初始化也可以分为两步,但是省略格式不可以。

如果没有对数组进行初始化,数组中元素有其默认值 如果数组中存储元素类型为基类类型,默认值为基类类型对应的默认值,比如:

1.4 数组的使用

1.4.1 数组中元素访问

数组在内存中是一段连续的空间,空间的编号都是从0开始的,依次递增,该编号称为数组的下标,数组可以通过 下标访问其任意位置的元素。比如:

【注意事项】

1. 数组是一段连续的内存空间,因此支持随机访问,即通过下标访问快速访问数组中任意位置的元素。

2. 下标从0开始,介于[0, N)之间不包含N,N为元素个数,不能越界,否则会报出下标越界异常。

抛出了 java.lang.ArrayIndexOutOfBoundsException 异常. 使用数组一定要下标谨防越界.

1.4.2 遍历数组

所谓 "遍历" 是指将数组中的所有元素都访问一遍, 访问是指对数组中的元素进行某种操作,

我们还可以用以上的代码去便利,但是我们会发现

1. 如果数组中增加了一个元素,就需要增加一条打印语句

2. 如果输入中有100个元素,就需要写100个打印语句

3. 如果现在要把打印修改为给数组中每个元素加1,修改起来非常麻烦。

因此我们可以用循环来打印:

1在数组中可以通过 数组对象.length 来获取数组的长度

2.也可以使用 for-each 遍历数组

2. 数组是引用类型

2.1 初始JVM的内存分布

内存是一段连续的存储空间,主要用来存储程序运行时数据的。比如:

1. 程序运行时代码需要加载到内存

2. 程序运行产生的中间数据要存放在内存

3. 程序中的常量也要保存

4. 有些数据可能需要长时间存储,而有些数据当方法运行结束后就要被销毁

因此如果对内存中存储的数据不加区分的随意存储,那对内存管理起来将会非常麻烦。但是JVM也对是使用的内存按不同的功能进行了划分:

程序计数器 (PC Register): 只是一个很小的空间, 保存下一条执行的指令的地址

虚拟机栈(JVM Stack): 与方法调用相关的一些信息,每个方法在执行时,都会先创建一个栈帧,栈帧中包含 有:局部变量表、操作数栈、动态链接、返回地址以及其他的一些信息,保存的都是与方法执行时相关的一 些信息。比如:局部变量。当方法运行结束后,栈帧就被销毁了,即栈帧中保存的数据也被销毁了。

本地方法栈(Native Method Stack): 本地方法栈与虚拟机栈的作用类似. 只不过保存的内容是Native方法的局 部变量. 在有些版本的 JVM 实现中(例如HotSpot), 本地方法栈和虚拟机栈是一起的

堆(Heap): JVM所管理的最大内存区域. 使用 new 创建的对象都是在堆上保存 (例如前面的 new int[]{1, 2, 3} ),堆是随着程序开始运行时而创建,随着程序的退出而销毁,堆中的数据只要还有在使用,就不会被销 毁。

方法区(Method Area): 用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数 据. 方法编译出的的字节码就是保存在这个区域

现在我们只简单关心堆 和 虚拟机栈这两块空间,后序会有更详细介绍。

2.2 基本类型变量与引用类型变量的区别

基本数据类型创建的变量,称为基本变量,该变量空间中直接存放的是其所对应的值;

而引用数据类型创建的变量,一般称为对象的引用,其空间中存储的是对象所在空间的地址。

2.3 再谈引用变量

2.4 认识 null

null 在 Java 中表示 "空引用" , 也就是一个不指向对象的引用.

3. 数组的应用场景

3.1 保存数据

3.2 作为函数的参数

1. 参数传基本数据类型

2. 参数传数组类型(引用数据类型)

总结: 所谓的 "引用" 本质上只是存了一个地址. Java 将数组设定成引用类型, 这样的话后续进行数组参数传参, 其实 只是将数组的地址传入到函数形参中. 这样可以避免对整个数组的拷贝(数组可能比较长, 那么拷贝开销就会很大).

3.3 作为函数的返回值

4. 数组练习 (博主写累了,这两天补充QAQ)

4.1 数组转字符串

5. 二维数组

二维数组本质上也就是一维数组, 只不过每个元素又是一个一维数组.

基本语法 :

数据类型[][] 数组名称 = new 数据类型 [行数][列数] { 初始化数据 };

结语:

在 Java 中,数组作为一种基础的数据结构,为我们在编程中处理大量相同类型的数据提供了便利。通过对 Java 数组的深入了解,我们能够更加高效地组织和操作数据。无论是简单的数值存储,还是复杂的对象管理,数组都有着广泛的应用场景。

在实际编程中,我们要根据具体的需求合理地选择和使用数组。同时,也要注意数组的边界问题,避免出现越界错误。不断地实践和探索,将使我们更加熟练地运用数组,为构建强大的 Java 应用程序奠定坚实的基础。让我们在编程的道路上,继续发挥数组的优势,创造出更加精彩的程序世界。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

使用Windows创建一个MFC应用【带界面】

MFC使用教程【对初学者保姆型友好!】 目录 前提条件 1:创建MFC应用程序 2. 项目结构解读 引用 外部依赖项 头文件 源文件 资源文件 文件功能详解 项目的主要流程 步骤2:配置OpenCV 安装OpenCV 包含目录与库文件 步骤3&#xff1…

Milvus×Dify半小时轻松构建RAG系统

最近,检索增强生成(RAG)技术在AI界引起了广泛关注。作为一种将知识库与生成模型结合的新型架构,RAG大大提升了AI应用的实际表现。而在构建RAG系统时,Milvus作为业界领先的开源向量数据库,扮演着关键角色。本…

视频格式在线转换,五种超实用的视频格式转换工具!

视频内容无处不在,从教育课程到娱乐电影,从社交媒体分享到在线会议,视频已成为我们日常生活中不可或缺的一部分。然而,不同的设备和平台支持的视频格式各异,会导致视频文件在某些设备上无法播放。因此,掌握…

计算机毕业设计python+spark知识图谱课程推荐系统 课程预测系统 课程大数据 课程数据分析 课程大屏 mooc慕课推荐系统 大数据毕业设计

指导教师意见: 1.对“文献综述”的评语: 对教育领域数据可视化的相关背景和现状做了综述,明确了课题的研究目标和研究重点,并对研究手段进行了概述。为后面的毕业设计做好了准备。 对本课题的深度、广度及工作量的…

【开源】第三期:数字货币程序化交易终端开源

关于初衷: 这篇文章,其实应该在六年前发出来,但是受制于各种杂事和生活琐事,一直拖到现在,想必有朋友看到在"终端"那期里,聊到的数字货币交易的实践,那个时候遍地都是数字货币交易所&…

git gui基本使用

一、图形化界面 二、创建新项目 创建文件,加入暂存区,提交到版本库 三、创建分支 四、合并分支 1.切换至master 五、更新分支 六、解决冲突 修改冲突,加入暂存区,提交到版本库 七、远程创建库 Gitee - 基于 Git 的代码托管和研…

储能硬件实物图

B 薄膜电容 薄膜电容 D 杜邦线 杜邦线 G 固态电容 固态电容 I IGBT iGBT S 散热片 散热片 Y 压敏电阻 压敏电阻 液冷板 液冷板

瑞萨IDE:CS+ for CC编译过程中执行脚本文件

最近发现使用CS for CC IDE发现一个很有意思的功能。编译工程过程中,IDE自动执行Python脚本和批处理脚本,极大地提高开发效率。 编写好脚本文件后,在IDE中选择CC-RH(Build Tool)->Common Options->Others。 Co…

SQL进阶技巧:如何找出开会时间有重叠的会议室?| 时间区间重叠问题

目录 0 场景描述 1 数据准备 2 问题分析 方法1:利用 lateral view posexplode()函数将表展开成时间明细表 方法2:利用数学区间讨论思想求解 3 小结 如果觉得本文对你有帮助,想进一步学习SQL语言这门艺术的,那么不妨也可以选…

arm架构ceph pacific部署

背景 合作伙伴实验室的华为私有云原来使用单点的nfs做为存储设备,现有两方面考量,业务需要使用oss了,k8s集群及其他机器也需要一套可扩展的分布式文件系统 部署ceph 初始机器配置规划 IP配置主机名Role10.17.3.144c8g1T数据盘ceph-node01…

Apache Seatunnel Zeta引擎-启动脚本分析

Apache SeaTunnel Zeta引擎的集群模式启动的第一步是执行bin/seatunnel-cluster.sh脚本,所以先来学习下这个脚本。 脚本执行流程分析 脚本简要注释 #!/bin/bash # # Licensed to the Apache Software Foundation (ASF) under one or more # contributor license a…

Java项目:154 基于ssm旅游信息网站(含论文+ppt)

作者主页:源码空间codegym 简介:Java领域优质创作者、Java项目、学习资料、技术互助 文中获取源码 项目介绍 使用旅游信息网站的分为管理员和用户两个角色的权限子模块。 管理员所能使用的功能主要有:个人中心、用户管理、旅游景点管理、交…

双指齐下:那晚我与算法的不解之缘

公主请阅 1.快乐数1.1题目说明示例 1示例 2 1.3题目分析1.4代码部分1.5代码解析 2.复写02.1题目说明示例 1示例 2 2.2题目分析2.3代码部分2.4代码解析 1.快乐数 题目传送门 1.1题目说明 编写一个算法来判断一个数 n 是不是快乐数。 「快乐数」定义为: 对于一个正…

探索 Blob 对象的应用场景和实例分析

一. 引言 当我们在开发 Web 应用程序时,常常会遇到需要处理二进制数据的情况。这时,Blob(Binary Large Object)对象就成为了一个非常有用的工具。Blob 对象可以用来表示一段二进制数据,它可以存储和操作各种类型的数据…

FPAG学习(5)-三种方法实现LED流水灯

目录 1.移位实现LED流水灯 1.1创建工程及源文件代码 1.1.1源代码 1.1.2仿真代码 1.1.3仿真 1.2实验结果 1.2.1总结 2.循环移位实现LED流水灯 3.38译码器实现LED流水灯 3.1原理 3.2源程序 1.移位实现LED流水灯 1.1创建工程及源文件代码 1.1.1源代码 利用计数器计数到…

Python网络爬虫从入门到实战

目录 引言 一、网络爬虫的概念 二、 网络爬虫的基本工作流程 (一)过程: (二)安装requests模块和beautifulsoup4模块 (三)requests库的使用 1、requests库的基本介绍 2、导入requests库的…

IO作业代码

问题 通过 fwrite和 fread去拷贝 文件到另外一个文件上 #include<myhead.h> #include <stdio.h> #include <string.h> #include <stdlib.h> #include<errno.h> #include<time.h> int main(int argc, const char *argv[]) { FILE *fp fo…

新款任天堂switch游戏机方案,支持4K60HZ投屏方案,显示器,手柄方案

据传任天堂将推出新的一代的switch掌机&#xff0c;而新款掌机将支持4K60HZ投屏 都2402年了再做1080P确实有点不太象话了 4K60HZ相较于1080P能够提升很多游戏体验&#xff0c;这时不管是HDMI显示器或者是VR眼睛清晰度都会让人舒服很多。 不过新一代的任天堂似乎也在PD协议上…

答题pk小程序的技术特点和性能优势分析

答题小程序是一种在移动设备上运行的应用程序&#xff0c;旨在提供各种类型的答题体验。以下是答题小程序的一些特点和优势&#xff1a; 一、特点 多样化的题目类型&#xff1a; 包括选择题、填空题、判断题等常见题型&#xff0c;还可能有简答题、论述题等更具挑战性的题型。…

qt+opengl 实现纹理贴图,平移旋转,绘制三角形,方形

1 首先qt 已经封装了opengl&#xff0c;那么我们就可以直接用了&#xff0c;这里面有三个函数需要继承 virtual void initializeGL() override; virtual void resizeGL(int w,int h) override; virtual void paintGL() override; 这三个函数是实现opengl的重要函数。 2 我们…