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

Java 数组知识点全解析

数组是 Java 基础数据结构,是学习集合、算法的前置内容,本文梳理数组核心用法、内存原理、扩容、排序及二维数组,附带代码示例。

一、数组基础使用

1. 概念

数组是存储多个相同类型数据的容器。

2. 声明与创建

// 标准声明

int[] arr;

// 声明并开辟空间,长度为5

int[] arr = new int[5];

3. 元素操作

- 赋值: 数组名[下标] = 值

- 取值: 数组名[下标]

- 下标范围: 0 ~ 数组长度-1 ,超出会触发 ArrayIndexOutOfBoundsException 数组下标越界异常

4. 数组默认值

- 基本数据类型:整数 0 、小数 0.0 、布尔 false 、字符空字符

- 引用类型: null

5. 三种初始化方式

// 1. 动态初始化

int[] arr1 = new int[4];

// 2. 静态初始化完整版

int[] arr2 = new int[]{1,2,3,4};

// 3. 静态初始化简写(声明和赋值必须同行)

int[] arr3 = {1,2,3,4};

6. 数组遍历

// 普通for循环遍历

for (int i = 0; i < arr.length; i++) {

System.out.println(arr[i]);

}

二、数组内存原理

1. 数组在内存中连续存储,数组名保存数组首地址。

2. 数组变量相互赋值,传递的是地址,多个变量指向同一个数组。

int[] a = {1,2,3};

int[] b = a;

b[0] = 10; // a数组同步改变

三、数组扩容

Java 数组长度固定,扩容思路:新建大数组 → 复制原元素 → 引用指向新数组。

1. 手动扩容

int[] oldArr = {1,2,3};

int[] newArr = new int[oldArr.length * 2];

for (int i = 0; i < oldArr.length; i++) {

newArr[i] = oldArr[i];

}

oldArr = newArr;

2. 工具类扩容(推荐)

import java.util.Arrays;

int[] arr = {1,2,3};

arr = Arrays.copyOf(arr, arr.length * 2);

四、可变长参数

JDK5 新特性,接收不定个数同类型参数,本质是数组。

public static void test(int... nums){

for (int num : nums) {

System.out.println(num);

}

}

// 调用

test(1);

test(1,2,3);

规则:一个方法只能有一个可变参数,且必须放在形参末尾。

五、数组排序

1. 冒泡排序

相邻元素两两比较,大数后移。

int[] arr = {5,2,9,1};

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 temp = arr[j];

arr[j] = arr[j+1];

arr[j+1] = temp;

}

}

}

2. 选择排序

每轮找出最小值,交换至前方。

int[] arr = {5,2,9,1};

for (int i = 0; i < arr.length - 1; i++) {

int minIndex = i;

for (int j = i+1; j < arr.length; j++) {

if (arr[j] < arr[minIndex]) {

minIndex = j;

}

}

int temp = arr[i];

arr[i] = arr[minIndex];

arr[minIndex] = temp;

}

3. 工具类排序(开发常用)

import java.util.Arrays;

int[] arr = {5,2,9,1};

Arrays.sort(arr);

六、二维数组

二维数组是一维数组中的数组。

1. 基本使用

// 3行4列二维数组

int[][] arr = new int[3][4];

// 赋值

arr[0][1] = 10;

// 获取行数:arr.length

// 获取单行列数:arr[0].length

2. 初始化方式

// 静态初始化

int[][] arr1 = {{1,2},{3,4,5},{6}};

// 不规则二维数组

int[][] arr2 = new int[3][];

arr2[0] = new int[2];

arr2[1] = new int[3];

总结

1. 数组长度固定,内存连续,依靠下标快速访问元素。

2. 扩容依赖新建数组+元素复制,优先使用 Arrays.copyOf 。

3. 冒泡、选择排序理解原理,业务代码直接使用 Arrays.sort 。

4. 二维数组为数组嵌套,支持不规则行列结构。

http://www.rkmt.cn/news/1483412.html

相关文章:

  • 2026 年工程施工事后控制参入人权限揭秘
  • 避坑指南:Apple Pay服务端验证的5个常见错误与Java最佳实践
  • 5分钟掌握AI图像分层技术:layerdivider终极工具完整指南
  • 2026年贵阳工伤维权律师选对=省心 王兴波律师8年实战推荐 - 本地品牌推荐
  • 用Python和Excel搞定TOPSIS综合评价:从数据清洗到结果可视化(附完整代码)
  • KLOGG日志分析工具:5个核心功能解决海量日志处理难题
  • AD7606与TI F28335 DSP联调避坑全记录:从原理图焊接到CCS代码调试的完整指南
  • 别再乱用data和xdata了!51单片机内存分配保姆级避坑指南(附Keil C51配置)
  • 别再为认证头疼了!微信小程序+ModelArts实战:IAM Token获取的3个关键细节与Scope选择
  • Arduino 工程迁移到 PlatformIO 步骤
  • 量子计算基础:两层级门的原理与应用
  • 使用 Webwright 在 CSDN 自动发文:Python 浏览器自动化实践
  • 自动化构建-make/Makefile
  • 终极文件编码检测工具:EncodingChecker让你的乱码问题5分钟解决
  • 从“只会敲代码”到“能做项目”:计算机专业的能力跃迁之路
  • STM32MP157双核开发实战:用STM32CubeIDE搞定M4核固件,并与A7核Linux通信(OpenAMP示例解析)
  • 杨逢昌——管理咨询与6S实战专家
  • 贝叶斯逻辑回归与并行MCMC方法实践指南
  • Mac —— Docker Desktop(Milvus和Redis)部署
  • 2026年泉州管道疏通推荐 千里到管道疏通24年匠心保障快速上门 - 本地品牌推荐
  • 告别虚拟机:在Windows 11的WSL2里一键部署Empire 4.2渗透测试环境
  • 别再乱用data和xdata了!深入解析51单片机不同存储区的访问速度与功耗影响
  • 抖音无水印视频批量下载完整指南:告别繁琐手动操作
  • 想知道闻喜哪家玻璃厂实力强?这几家品质过硬口碑好选了准不踩坑
  • 别再死记硬背了!用Python+spaCy实战NLP句法分析,5分钟搞定依存关系可视化
  • HarmonyOS Hi3861 WiFi实战:手把手教你用C代码实现一个简易的无线中继器(STA+AP混合模式)
  • 2026年济南门窗定制小区定制哪家好?泉米阁领先 - myqiye
  • 多平台电商通用采集系统:一套代码打通淘宝/天猫/1688/京东/拼多多/抖音
  • WPS双进程之谜:手动关闭wpscloudsv,实测能省多少内存?(附详细步骤)
  • 2026年 HC420/780DPD+Z 双相高强钢镀锌板推荐榜:卓越强度与抗腐蚀性能深度解析 - 品牌发掘