JAVA中数组的使用
数组(array),是多个相同类型数据按照一定顺序排列的集合,并使用一个名字命名,通过编号的方式对这些数据进行统一管理。
做个铺垫:
什么是数据结构?
即数据与数据之间的逻辑关系,包含:集合、一对一、一对多、多对多等。
数据的存储结构:
- 线性表(一对一的关系):顺序表(数组)、链表、栈、队列
- 树形结构(一对多的关系):二叉树
- 图形结构(多对多的关系)
常应用的算法:
- 排序算法
- 搜索算法
1、常见概念:
- 数组概念:多个相同类型数据按一定顺序排列的集合,并使用一个名字命名,通过编号的方式对这些数据进行统一管理。
数组属于引用数据类型,数组中的元素可以是任何数据类型,包括引用数据类型。
创建数组对象会在内存中开辟一整块连续的空间,而数组名中引用的是这块连续空间的首地址。
- 数组相关的概念:
1、 数组名
2、数组元素
3、角标、下标、索引
4、数组的长度:元素的个数
- 数组的特点:顺序排列、长度一但确定不可修改
- 数组的分类:
1、按照维数:一维数组、二维数组。。。
2、按照数组元素的类型:基本数据类型元素的数组、引用数据类型元素的数组
2、一维数组的使用
- 一维数组的声明和初始化:一旦初始化完成,长度就确认了。
int[] arr = new int[]{1,2,3,4,5};静态初始化
String[] arr2= new String[5];动态初始化
int[] arr3={1,2,3,4,5,5};静态初始化-类型推断
2. 如何调用数组的指定位置的元素
通过角标的方式调用,从0开始,到(数组的长度-1)结束。
arr[1]
arr[2]
3.如何获取数组的长度
length属性
int k = arr.length;
4.如何遍历数组
可通过for循环,依次通过数组的角标遍历。
5.数组元素的默认初始化值
-
- 数组元素是整型,默认0
- 数组元素是浮点型,默认0.0
- char,默认0或‘\u0000’,而非‘0’
- boolean,默认false
- 数据元素是引用数据类型时,null
6.数组的内存解析
-
- 栈:stack,存放局部变量。局部变量存放的地址值,指向堆。
- 堆:heap,存放new出来的结构(对象、数组)。初始化地址值可以与局部变量相关联,当关联取消,垃圾回收机制会不定时清除。
- 方法区:常量池+静态域
- 数组定义的过程:new时,在堆空间中开辟固定长度的位置,用于存放数组的元素,同时初始化的首地址值和栈空间中创建的局部变量关联。此时堆中开辟的元素位置上储存的是默认初始化值,等待赋值。
3、多维数组的使用
对于二维数组的理解,可以看成是一维数组array1作为另一个一维数组array2的元素而存在。数组属于引用数据类型,数组的元素也可以是引用数据类型。一个一维数组A的元素如果是一维数组类型,那么数组A称为二维数组。
从数据底层的运行机制来看,其实没有多维数组。
- 二维数组的声明和初始化
int[][] arr1=new int[][]{{1,2,3},{4,5,6}};
String[][] arr2=new String[3][2];
String[][] arr3=new String[3][];
int[] arr4[]=new int[][]{{1,2,3},{4,5,6}};
int[] arr5[]={{1,2,3},{4,5,6}};//类型推断
2.如何调用数组的指定位置的元素
内层元素 arr[3][2]
外层元素 arr[3]
3.如何获取数组的长度
arr.length
arr[1].length
4.如何遍历二维数组
使用嵌套for循环来遍历二维数组,外层for循环遍历外层元素,内层for循环遍历内层元素。
5.二维数组元素的默认初始化值:
-
- 对于初始化方式:int[][] arr = new int[4][3];
外层元素的初始化值:地址值
内层元素的初始化值:与一维数组初始化情况相同
-
- 对于初始化方式:int[][] arr=new int[4][];
外层元素的初始化值:null
内层元素的初始化值:不能调用,否则报错
4、Arrays类
java.util.Arrays类是操作数组的工具类,包含了用来操作数组的各种方法,常用方法如下:
a 、boolean equals(int[] a,int[] b)判断两个数组是否相等
b、String toString(int[] a) 输出数组信息
c、void fill(int[] a,int val)将指定值填充到数组之中
d、void sort(int[] a )对数组进行排序
e、int binarySearch(int[] a,int key)对排序后的数组进行二分法检索指定的值
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)