Java基础学习(五)
Java基础学习(五):数组
本文为个人学习记录,内容学习自 狂神说Java 和 黑马程序员
概念
- 数组是相同类型数据的有序集合
- 每个数据称为一个数组元素,可以通过下标来访问
声明与创建
-
数组的两种基本声明方法:
数据类型[] 数组名; // 推荐使用 数据类型 数组名[];
-
数组的两种基本创建方法:
数组名 = {数组内容}; // 创建时直接初始化 数组名 = new 数据类型[数组长度]; // 创建时仅指定大小,元素被初始化为默认值,默认值规则和前面实例变量、类变量的规则一致
-
当然也可以一步完成数组的声明和创建:
数据类型[] 数组名 = {数组内容}; 数据类型[] 数组名 = new 数据类型[数组长度];
-
数组的元素通过索引(下标)来访问,索引从 0 开始
-
获取数组长度
数组名.length
初始化
-
静态初始化:手动指定数组元素,系统会根据元素个数计算数组长度
int[] a = new int[] {1, 2}; // 完整形式 int[] a = {1, 2}; // 简写形式
-
动态初始化:手动指定数组长度,由系统给出默认初始化值
int[] a = new int[2]; a[0] = 1; a[1] = 2;
基本特点
- 数组一旦被创建,它的大小就是不可改变的
- 数组中的元素必须是相同类型
- 数组中的元素可以是任何数据类型,包括基本类型和引用类型
- 数组变量属于引用类型,数组也可以看成对象,数组中每个元素相当于该对象的成员变量
数组的地址
直接打印引用类型的变量,输出的是该引用类型的值,也是数组/对象的地址值
int[] a = new int[] {1, 2};
double[] b = {5, 6, 7};
System.out.println(a); // 输出为 [I@1b6d3586,[ 表示数组,I 表示int类型,@ 为固定格式,剩下为地址值
System.out.println(b); // 输出为 [D@4554617c,[ 表示数组,D 表示double类型,@ 为固定格式,剩下为地址值
内存分析

举个创建数组的栗子:
- 当声明数组时,会在栈中为引用类型的变量 array 分配空间,用于存储数组的地址;
- 当创建数组时,会根据给定的数组大小在堆中分配空间,而地址由声明时栈中的变量 array 指出;
- 当对数组赋值时,将数值保存在堆中。

应用
-
使用 增强for循环 遍历数组元素
int[] array = {1, 2, 3, 4, 5}; for (int i : array) { System.out.println(i); // 打印数组中每一个元素 }
-
数组作为实参和形参
public static void main(String[] args) { int[] array = {1, 2, 3, 4, 5}; printArray(array); } public static void printArray(int[] array){ for (int i : array){ System.out.println(i); } }
-
数组作为返回值
public static void main(String[] args) { int[] array = {1, 2, 3, 4, 5}; int[] result = reverse(array); for (int i: result){ System.out.println(i); } } public static int[] reverse(int[] array){ int[] result = new int[array.length]; for (int i = 0; i < array.length; i++){ result[array.length - i -1] = array[i]; } return result; }
多维数组
多维数组可以看成数组的数组,比如二维数组就是一个特殊的一维数组,其每一个元素都是一个一维数组
二维数组的声明和创建:
int[][] a = {{1, 2, 3, 4, 5}, {2, 3, 4, 5, 6}};
int[][] a = new int[2][5];
扩展内容
Arrays 类
数组对象本身并没有提供什么方法可以供我们调用,但 API 中提供了一个工具类
java.util.Arrays
供我们使用
- 数组的工具类
java.util.Arrays
- Arrays 类中的方法都是 static 修饰的 静态 方法,可以直接使用类名进行调用
- 常用功能:
- 给数组赋值:通过
fill
方法 - 对数组排序:通过
sort
方法 - 比较数组:通过
equals
方法比较数组中的元素是否相等 - 查找数组元素:通过
binarySearch
方法能对排序好的数组进行二分查找
- 给数组赋值:通过
示例一:采用 Arrays.toString
快速打印数组数据
import java.util.Arrays;
int[] a = {1, 2, 45, 63, 8};
System.out.println(Arrays.toString(a)); // 输出为 [1, 2, 45, 63, 8]
示例二:采用 Arrays.sort
进行升序排序
import java.util.Arrays;
int[] a = {1, 2, 45, 63, 8};
Arrays.sort(a);
System.out.println(Arrays.toString(a)); // 输出为 [1, 2, 8, 45, 63]
冒泡排序
总共有八大排序方法,而冒泡排序无疑是最为出名的排序算法之一

冒泡排序的时间复杂度为 O(n²)
示例:一种简单的实现方法
public static void sort(int[] array){
for (int i = 0; i < array.length - 1; i++){
for (int j = 0; j < array.length - 1 - i; j++){
if (array[j] > array[j+1]){
int tmp = array[j];
array[j] = array[j+1];
array[j+1] = tmp;
}
}
}
System.out.println(Arrays.toString(array));
}
稀疏数组
- 当一个数组中大部分元素为0,或者为同一值时,可以使用稀疏数组来保存该数组
- 稀疏数组的处理方式是:记录数组一共有几行几列,有多少个不同值,把具有不同值的元素值和行列记录在一个小规模的数组中,从而缩小程序的规模
- 示例:下图左边是原始数组,右边是稀疏数组,其中稀疏数组的第一行记录了原始数组的总行列及不同值个数,其余行记录不同值的具体行列和数值

【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~