数组
数组
数组的定义
- 相同类型数据的有序集合
- 每一个数据称作一个数组元素,每个数组元素可以通过一个下标去访问
数组的创建
必须声明数组变量,才能在程序中使用数组。
dataType[] arrayRefVar; //首选方法
dataType arrayRefVar[]; //效果相同,但不是首选
Java语言中使用new操作符来创建数组
dataType[] arrayRefVar = new dataType[arraySize];
int[] nums = new int[10]; //声明和创建一起进行
数组的元素通过索引访问,从0开始。合法区间:[0,length-1]
创建数组之后给其赋值,若有某个位置没赋值,则为该类型的默认值
内存分析
Java内存:
- 堆
- 存放new的对象和数组
- 可以被所有的线程共享,不会存放别的对象引用
- 栈
- 存放基本变量类型(会包含这个基本类型的具体数值)
- 引用对象的变量(会存放这个引用在堆里面的具体地址)
- 方法区
- 可以被所有的线程共享
- 包含了所有的class和static变量
- ...
int[] array; //在栈里新建了个名为array的空间
array = new int[10]; //在堆里开辟了一个空间,里面有十个小空间。声明的时候不存在,new的时候才会产生
//赋值就是给小空间里填上值
在赋值之后,如果输出array[10],则会提示ArrayIndexOutOfBoundsException,即数组下标越界
数组的三种初始化
-
静态初始化
int[] a = {1,2,3}; //一旦定义数组的大小就不可改变 Man[] men = {new Man(1,1),new Man(2,2)};
-
动态初始化
int[] a = new int[2]; a[0] = 1; a[1] = 2;
-
默认初始化
数组是引用类型,其元素相当于类的实例化变量,因此数组一经分配空间,其中的每个元素也被按照实例变量同样的方式被隐式初始化
数组的四个基本特点
- 长度确定,一旦被创建,大小不可改
- 元素类型必相同,但是类型可以是任意的数据类型,包括基本类型和引用类型
- 数组本身属于引用类型,可以看成是对象,每个元素相当于该对象的成员变量。Java中对象在堆中,因此数组对象本身是在堆中的
数组使用
直接输出数组并不是输出数组里的元素,而是一串数组的hash码
数组可以做为参数输入进函数里
//打印数组元素
public static void printArray(int[] arrays){
for (int i = 0; i < arrays.length; i++) {
System.out.print(arrays[i] + " ");
}
}
也可以做为函数的返回值
//反转数组(数组做为返回值)
public static int[] reverse(int[] arrays)
{
int[] result = new int[arrays.length];
for (int i = 0,j = result.length-1; i < arrays.length; i++,j--) {
result[j] = arrays[i];
}
return result;
}
多维数组
多维数组可以看成数组的数组,比如二维数组就是一个特殊的一维数组,每一个元素都是一个一维数组。
int a[][] = new int[2][5];
以上二维数组可以看成一个两行五列的数组
注
- 在学习面向对象编程之后,一般不会用到维度特别高的数组
Arrays类
数组的工具类java.util.Arrays。
数组对象本身没有什么方法可以调用,但是API中提供了一个工具类Arrays供我们使用(查看JDK帮助文档),从而可以对数据对象进行一些基本的操作。
Arrays类中的方法都是static修饰的静态方法,在使用的时候可以直接使用类名进行调用,而不用使用对象来调用(注意是“不用”而不是“不能”)
常用的功能:
- 给数组赋值:fill方法
- 对数组排序:sort方法
- 比较数组:equals方法比较是否相等
- 查找数组元素:binarySearch方法对已序数组二分查找
方法都是人写的,已有的方法当然可以自己实现,但是既然有了拿来直接用比重复造轮子轻松很多
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix