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

Java从入门到“放弃”(精通)之旅——数组的定义与使用⑥

Java从入门到“放弃”(精通)之旅🚀——数组⑥

前言——什么是数组?

数组:可以看成是相同类型元素的一个集合,在内存中是一段连续的空间。比如现实中的车库,在java中,包含6个整形类型元素的数组,就相当于上图中连在一起的6个车位,从下图中可以看到:
在这里插入图片描述

📖一、数组的基本概念

1.1 为什么需要数组

考虑存储5个学生的考试成绩:

// 传统方式
int score1 = 70;
int score2 = 80;
// ...需要定义多个变量

这种方式在数据量大时非常不便。数组应运而生,它可以存储相同类型的多个数据,是内存中的一段连续空间

1.2 数组的特点

  • 元素类型相同
  • 内存空间连续
  • 通过下标访问(从0开始)

🔛二、数组的创建与初始化

2.1 数组创建语法

T[] 数组名 = new T[N];  // T:元素类型,N:数组长度

示例:

int[] array1 = new int[10];      // 10个int
double[] array2 = new double[5]; // 5个double

2.2 初始化方式

动态初始化:指定长度

int[] array = new int[10];  // 默认值0

静态初始化:指定内容

int[] array1 = new int[]{1,2,3};
// 简写形式
int[] array2 = {1,2,3};  

注意

  • 静态初始化无需指定长度
  • 简写形式不能拆分两步操作

2.3 默认值规则

✅Java数组元素默认值对照表

数据类型默认值
byte0
short0
int0
long0
float0.0f
double0.0
char‘\u0000’
booleanfalse

说明:

  1. 数值类型(byte/short/int/long/float/double)默认值均为0
  2. char类型默认是Unicode空字符(\u0000)
  3. boolean类型默认false
  4. 引用类型(如String、Object等)默认值为null

注意:当数组被创建但未显式初始化时,各元素会被自动赋予对应类型的默认值

🔧三、数组的使用

3.1 元素访问

int[] arr = {10,20,30};
System.out.println(arr[0]); // 10
arr[0] = 100; // 修改元素

重要:下标从0开始,越界会抛出ArrayIndexOutOfBoundsException

3.2 遍历数组

传统for循环

for(int i=0; i<arr.length; i++){System.out.println(arr[i]);
}

增强for循环(for-each)

for(int num : arr){System.out.println(num);
}

🤖四、数组的内存模型

4.1 JVM内存划分

  • :存储局部变量
  • :存储对象和数组
  • 方法区、程序计数器等
    在这里插入图片描述

4.2 引用类型特性(简化版指针)

int[] arr1 = new int[]{1,2,3};
int[] arr2 = arr1;  // 两个引用指向同一数组

🕹️五、数组常见操作

5.1 数组拷贝

浅拷贝

int[] newArr = arr;  // 共享同一数组

示意图:
在这里插入图片描述

深拷贝

// 方法1:System.arraycopy
int[] newArr = new int[arr.length];
System.arraycopy(arr, 0, newArr, 0, arr.length);// 方法2:Arrays.copyOf
int[] newArr = Arrays.copyOf(arr, arr.length);

示意图:在这里插入图片描述

5.2 数组排序

冒泡排序

void bubbleSort(int[] arr){for(int i=0; i<arr.length-1; i++){for(int j=0; j<arr.length-1-i; j++){if(arr[j] > arr[j+1]){int tmp = arr[j];arr[j] = arr[j+1];arr[j+1] = tmp;}}}
}

内置排序

Arrays.sort(arr);  // 快速排序实现

5.3 二分查找

int binarySearch(int[] arr, int key){int left = 0, right = arr.length-1;while(left <= right){int mid = (left + right)/2;if(arr[mid] == key) return mid;else if(arr[mid] < key) left = mid+1;else right = mid-1;}return -1;
}

📜六、二维数组

6.1 基本使用

int[][] arr = {{1,2,3},{4,5,6}
};// 遍历
for(int i=0; i<arr.length; i++){for(int j=0; j<arr[i].length; j++){System.out.print(arr[i][j]+" ");}System.out.println();
}

⚙️七、实际应用案例

7.1 斐波那契数列

public static int[] fib(int n){if(n <= 0) return null;int[] arr = new int[n];arr[0] = arr[1] = 1;for(int i=2; i<n; i++){arr[i] = arr[i-1] + arr[i-2];}return arr;
}

7.2 冒泡排序

public class BubbleSort {public static void bubbleSort(int[] arr) {int n = arr.length;for (int i = 0; i < n - 1; i++) {for (int j = 0; j < n - i - 1; j++) {if (arr[j] > arr[j + 1]) {// 交换arr[j]和arr[j + 1]int temp = arr[j];arr[j] = arr[j + 1];arr[j + 1] = temp;}}}}public static void main(String[] args) {int[] array = {64, 34, 25, 12, 22, 11, 90};bubbleSort(array);for (int num : array) {System.out.print(num + " ");}}
}

在这里插入图片描述

7.2 数组工具类

// 数组转字符串
String str = Arrays.toString(arr);// 数组填充
Arrays.fill(arr, 0);  // 全部填充为0

总结

数组作为Java中的基础数据结构,具有以下特点:

  1. 存储相同类型元素的集合
  2. 内存空间连续,支持随机访问
  3. 长度固定,初始化后不可改变
  4. 作为引用类型,需要注意深浅拷贝问题

掌握数组的各种操作和特性,是Java编程的重要基础。在实际开发中,应根据需求选择合适的数组操作方式,并注意避免常见的数组越界等问题。

在这里插入图片描述
JavaSE往期专栏

  • Java从入门到“放弃”(精通)之旅——启航①
  • Java从入门到“放弃”(精通)之旅——数据类型与变量②
  • Java从入门到“放弃”(精通)之旅——运算符③
  • Java从入门到“放弃”(精通)之旅——程序逻辑控制④
  • Java从入门到“放弃”(精通)之旅——方法的使用⑤
    在这里插入图片描述

相关文章:

  • 批量创建OpenStack实例
  • 【java实现+4种变体完整例子】排序算法中【堆排序】的详细解析,包含基础实现、常见变体的完整代码示例,以及各变体的对比表格
  • doris/clickhouse常用sql
  • C++镌刻数据密码的树之铭文:二叉搜索树
  • 与终端同居日记:Linux指令の进阶撩拨手册
  • 区块链木材业务服务平台:商贸物流新变革
  • 18、TimeDiff论文笔记
  • 【综述】一文读懂卷积神经网络(CNN)
  • 【2025】Datawhale AI春训营-RNA结构预测(AI+创新药)-Task2笔记
  • [dp20_完全背包] 介绍 | 零钱兑换
  • 包含物体obj与相机camera的 代数几何代码解释
  • 220V转5V转12V电机驱动供电WT5105
  • 【25软考网工笔记】第二章(7)多路复用技术
  • Git 命令速查手册
  • 游戏引擎学习第234天:实现基数排序
  • Chromium 134 编译指南 macOS篇:编译优化技巧(六)
  • 探索 .bat 文件:自动化任务的利器
  • C++选择排序原理及实现
  • MySQL数据库 - 锁
  • 焕活身心,解锁健康养生新方式
  • 李家超:香港特区政府积极推进十五运会各项筹办工作
  • 复旦大学空间互联网研究院成立,将聚焦卫星互联网等领域
  • 两部门通报18个破坏耕地、毁林毁草典型问题
  • 人民日报钟声:经济霸凌损害美国国家信誉
  • 六部门联合印发《促进和规范金融业数据跨境流动合规指南》
  • 梅宏院士:数实共生将改写社会经济运行规则