Java:数组的定义和使用

Java:数组的定义和使用 Java 数组Array超详细讲解从零基础到面试八股 内存原理 常见坑 最佳实践数组是 Java 中最基础、最重要的数据结构之一几乎所有集合框架ArrayList、HashMap 等底层都依赖数组。掌握数组才能真正理解 Java 内存模型和性能优化。1. 什么是数组数组是相同数据类型的有序集合在内存中分配连续的存储空间。特点长度固定一旦创建不可改变元素类型必须一致下标从0开始支持随机访问通过下标时间复杂度 O(1)2. 数组的定义方式三种写法方式一先声明再创建推荐初学者使用// 1. 声明int[]arr1;// 最常用intarr2[];// C语言风格不推荐// 2. 创建分配空间arr1newint[5];// 创建长度为5的int数组默认值全为0方式二声明 创建 初始化静态初始化// 静态初始化最常用int[]arr{10,20,30,40,50};// 等价于int[]arrnewint[]{10,20,30,40,50};方式三动态初始化先创建后赋值int[]arrnewint[5];// 默认值0arr[0]100;arr[1]200;// ...3. 数组的常用操作publicclassArrayDemo{publicstaticvoidmain(String[]args){int[]scores{85,92,78,96,88};// 1. 获取长度System.out.println(数组长度: scores.length);// 5// 2. 访问元素下标从0开始System.out.println(scores[0]);// 85System.out.println(scores[4]);// 88// 3. 修改元素scores[2]80;// 4. 遍历数组三种方式// 方式1普通for循环for(inti0;iscores.length;i){System.out.print(scores[i] );}System.out.println();// 方式2增强for循环foreach最常用for(intscore:scores){System.out.print(score );}System.out.println();// 方式3JDK 8 Stream函数式Arrays.stream(scores).forEach(System.out::println);}}4. 数组的内存结构面试高频int[]arrnewint[3];arr[0]10;arr[1]20;内存指向图解栈Stack 堆Heap arr ─────────────────────► [10, 20, 0] ← 连续内存空间 引用地址 ↑ arr[0] arr[1] arr[2]数组变量引用存储在栈中保存的是堆中数组的首地址。数组元素存储在堆中内存连续。数组一旦创建长度固定类型固定。5. 数组的默认初始化值数组元素类型默认值基本类型 int0基本类型 double0.0基本类型 char‘’基本类型 booleanfalse引用类型null6. 多维数组重点Java 中没有真正的多维数组本质是数组的数组。// 二维数组int[][]matrixnewint[3][4];// 3行4列// 静态初始化int[][]arr{{1,2,3},{4,5,6},{7,8,9}};// 不规则二维数组每行长度可不同int[][]irregularnewint[3][];irregular[0]newint[2];irregular[1]newint[5];irregular[2]newint[3];7. 数组的常见工具类 —— Arraysint[]arr{5,2,8,1,9};// 1. 排序Arrays.sort(arr);// [1,2,5,8,9]// 2. 二分查找必须先排序intindexArrays.binarySearch(arr,5);// 3. 填充Arrays.fill(arr,100);// 4. 数组转字符串打印用System.out.println(Arrays.toString(arr));// 5. 数组拷贝int[]newArrArrays.copyOf(arr,10);// 扩容8. 数组的常见问题与坑生产/面试必知数组越界异常ArrayIndexOutOfBoundsExceptionarr[arr.length];// 错误最大下标是 length-1数组是定长的无法直接扩容需要手动拷贝到新数组Arrays.copyOf 底层就是这么做的数组作为方法参数时传递的是引用可修改元素但不能改变数组长度null 指针异常int[]arrnull;System.out.println(arr.length);// 报错9. 数组 vs 集合ArrayList对比面试常问维度数组ArrayArrayList长度固定动态可变性能更高连续内存稍低涉及扩容类型安全必须相同类型泛型更安全操作方便性一般丰富add、remove等适用场景已知固定大小、高性能大部分业务场景规则已知元素数量且固定 → 用数组元素数量不确定、需要频繁增删 → 用 ArrayList10. 练习题建议立即动手定义一个 int 数组存放 1-10求和、求平均值冒泡排序实现找出数组中最大值和最小值数组去重不使用 Set二维数组转一维数组数组部分总结口诀数组定长类型同内存连续下标零栈存引用堆存值越界异常要小心静态动态两种初始化Arrays工具很给力长度固定要扩容拷贝新数组来完成。数组是 Java 所有集合的底层基础学透数组后续学习 List、Map、Set 会非常轻松。想继续学习哪一部分「下一节Java 集合框架全解析List、Set、Map」「数组与指针内存模型深入」「数组常见面试题 20 道 答案」「二维数组 不规则数组实战」或直接进入「Java 面向对象进阶」直接回复关键词我立刻给你下一篇超详细整理继续加油数组掌握好了Java 基础就稳了一大半