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

【数组的定义与使用】

文章目录

  • 一、数组的基本概念
    • 1、什么是数组
    • 2、数组的创建及初始化
      • (1)数组的创建
      • (2)数组的初始化
    • 3、数组的使用
      • (1)数组中元素访问
      • (2)遍历数组
  • 二、数组是引用类型
    • 1、初始JVM的内存分布
    • 2、基本类型变量与引用类型变量的区别
    • 3、再谈引用变量
    • 4、认识 null
  • 三、数组的应用场景
    • 1、保存数据
    • 2、作为函数的参数
      • (1)参数传基本数据类型
      • (2)参数传数组类型(引用数据类型)
    • 3、作为函数的返回值
  • 四、数组练习
    • 1、数组转字符串
    • 2、数组拷贝
    • 3、求数组中元素的平均值
    • 4、查找数组中指定元素(顺序查找)
    • 5、查找数组中指定元素(二分查找)
    • 6、数组排序(冒泡排序)
    • 7、数组逆序
    • 8、奇数位于偶数之前
    • 9、只出现一次的数字
    • 10、Arrays常用方法
  • 五、二维数组


一、数组的基本概念

1、什么是数组

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

  1. 数组中存放的元素其类型相同
  2. 数组的空间是连在一起的
  3. 每个空间有自己的编号,起始位置的编号为0,即数组的下标

2、数组的创建及初始化

(1)数组的创建

在这里插入图片描述
T:表示数组中存放元素的类型
T[]:表示数组的类型
N:表示数组的长度
在这里插入图片描述

(2)数组的初始化

数组的初始化主要分为动态初始化以及静态初始化。
1. 动态初始化:在创建数组时,直接指定数组中元素的个数

int[] array = new int[10];

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

语法格式: T[] 数组名称 = {data1, data2, data3, ..., datan};
int[] array1 = new int[]{0,1,2,3,4,5,6,7,8,9};
double[] array2 = new double[]{1.0, 2.0, 3.0, 4.0, 5.0};
String[] array3 = new String[]{"hell", "Java", "!!!"};

【注意事项】

  • 静态初始化虽然没有指定数组的长度,编译器在编译时会根据{}中元素个数来确定数组的长度。
  • 静态初始化时, {}中数据类型必须与[]前数据类型一致。
  • 静态初始化可以简写,省去后面的new T[]。
    注意:虽然省去了new T[], 但是编译器编译代码时还是会还原
  • 数组也可以按照如下C语言个数创建,不推荐
/*
该种定义方式不太友好,容易造成数组的类型就是int的误解
[]如果在类型之后,就表示数组类型,因此int[]结合在一块写意思更清晰
*/
int arr[] = {1, 2, 3};
  • 静态和动态初始化也可以分为两步,但是省略格式不可以
int[] array1;
array1 = new int[10];
int[] array2;
array2 = new int[]{10, 20, 30};
// 注意省略格式不可以拆分, 否则编译失败
// int[] array3;
// array3 = {1, 2, 3};
  • 如果没有对数组进行初始化,数组中元素有其默认值
    如果数组中存储元素类型为基类类型,默认值为基类类型对应的默认值,比如:
    在这里插入图片描述
    如果数组中存储元素类型为引用类型,默认值为null

3、数组的使用

(1)数组中元素访问

数组在内存中是一段连续的空间,空间的编号都是从0开始的,依次递增,该编号称为数组的下标,数组可以通过下标访问其任意位置的元素。
也可以通过[]对数组中的元素进行修改
【注意事项】

  1. 数组是一段连续的内存空间,因此支持随机访问,即通过下标访问快速访问数组中任意位置的元素
  2. 下标从0开始,介于[0, N)之间不包含N,N为元素个数,不能越界,否则会报出下标越界异常。
    下标越界抛出了 java.lang.ArrayIndexOutOfBoundsException 异常(数组越界异常). 使用数组一定要下标谨防越界

(2)遍历数组

所谓 “遍历” 是指将数组中的所有元素都访问一遍, 访问是指对数组中的元素进行某种操作,比如:打印。
注意:在数组中可以通过 数组对象.length 来获取数组的长度
在这里插入图片描述
在这里插入图片描述
for-each 是 for 循环的另外一种使用方式. 能够更方便的完成对数组的遍历. 可以避免循环条件和更新语句写错
二者区别:
1、for循环是有下标的、for each只是简单的遍历
2、一个是需要知道长度的,一个不需要
按住Ct

http://www.xdnf.cn/news/16108.html

相关文章:

  • 排序查找算法,Map集合,集合的嵌套,Collections工具类
  • 【独立工具】小红书图片采集软件
  • pytest官方Tutorial所有示例详解(二)
  • Python循环结构
  • 【数据结构】二叉树进阶算法题
  • AI服务器给一体成型电感带来多大的市场空间
  • C++开发---奥比中光(Orbbec)的ob库
  • 【CMake】CMake 常用语法总结
  • 到底可不可以用jion?jion如何优化?
  • 力扣-152.乘积最大子数组
  • 自己开发VUE之web网页打包技术毕业论文——仙盟创梦IDE
  • 【科研绘图系列】R语言绘制双侧坐标轴的条形图
  • NPM/Yarn完全指南:前端开发的“基石“与“加速器“
  • 第4章唯一ID生成器——4.1 分布式唯一ID
  • 电脑录屏软件推荐:如何使用oCam录制游戏、教程视频
  • ue4 优化
  • 完成多项问题修复,MaxKB开源企业级智能体平台v1.10.9 LTS版本发布
  • Webpack/Vite 终极指南:前端开发的“涡轮增压引擎“
  • 侯捷---c++面向对象高级编程
  • 制造工厂高效出图新技术——共享云桌面
  • JavaSE:学习输入输出编写简单的程序
  • list 介绍 及 底层
  • ESP32使用 vscode IDF 创建项目到烧录运行全过程
  • Flink-1.19.0源码详解8-ExecutionGraph生成-前篇
  • RabbitMQ简述
  • vue3 el-table 列数据合计
  • 在一个网页浏览器的控制台测试后端java是否支持SSE服务
  • Vulnhub Matrix-Breakout-2-Morpheus靶机攻略
  • 基于规则架构风格对业务的重构
  • 每日算法刷题Day52:7.24:leetcode 栈5道题,用时1h35min