当前位置: 首页 > 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.jsqmd.com/news/971679/

相关文章:

  • ESP32 I2C驱动OLED屏幕保姆级教程:从硬件连接到显示‘Hello World‘
  • 用Python和Excel搞定TOPSIS综合评价:从数据清洗到结果可视化(附完整代码)
  • 2026年贵阳工伤维权律师选对=省心 王兴波律师8年实战推荐 - 本地品牌推荐
  • F28335 DSP驱动AD7606避坑指南:从原理图焊接到CCS代码调试的完整流程
  • openLCA 2.6.2:如何用开源软件完成专业的生命周期评估?
  • 从‘旋转时钟’到‘整数模n’:手把手用Python代码验证群同构与同态(附完整代码)
  • 告别ifup/ifconfig:Ubuntu 18.04+网络配置,用Netplan这一篇就够了(含YAML避坑指南)
  • 2026年佛山专利申请与无效律师哪家好?5位实战专家推荐 - 本地品牌推荐
  • py-spy:不改动代码就能分析 Python 性能
  • KLOGG日志分析工具:5个核心功能解决海量日志处理难题
  • 你 课以的
  • Windows 10系统终极清理指南:3种方法彻底移除预装垃圾软件,提升性能与隐私保护
  • 别再为认证头疼了!微信小程序+ModelArts实战:IAM Token获取的3个关键细节与Scope选择
  • 北京GEO优化哪家靠谱?2026主流服务商横向对比与选型指南
  • 别再乱用data和xdata了!51单片机内存分配保姆级避坑指南(附Keil C51配置)
  • 殊途同归:大成智慧学、地理科学和融智学
  • 微信小程序调用华为云ModelArts模型保姆级教程(从IAM Token到API调用)
  • 告别环境噩梦:用Docker Compose一键部署gem5 GCN3 GPU模拟器与VSCode开发调试环境
  • AD7606与TI F28335 DSP联调避坑全记录:从原理图焊接到CCS代码调试的完整指南
  • Arduino 工程迁移到 PlatformIO 步骤
  • 从“只会敲代码”到“能做项目”:计算机专业的能力跃迁之路
  • 丰田车机维修不求人:手把手教你用示波器诊断AVC-LAN音频总线故障
  • 自动化构建-make/Makefile
  • 保姆级教程:用OpenCV+Python一步步搞定双目相机标定与三维重建
  • Proteus仿真中PCF8574驱动LCD1602的5个常见坑点及解决方法
  • 终极文件编码检测工具:EncodingChecker让你的乱码问题5分钟解决
  • 别再手动整理BOM了!用Excel自定义Altium Designer料单模板,效率翻倍(附模板文件)
  • 使用 Webwright 在 CSDN 自动发文:Python 浏览器自动化实践
  • Almanac:基于行动层面的智能体协作心智模型标注数据集与行为预测基准
  • 量子计算基础:两层级门的原理与应用