文章目录
一、数组是个什么鬼?🤔
先给各位萌新打个比方:数组就像咱们宿舍楼的快递架(每个格子里只能放一个快递),每个格子都有固定编号(索引),咱们要找快递直接报编号就行。Java数组就是这个原理——用连续内存空间存储相同类型数据的容器!
举个活生生的例子:
// 创建能装5个快递的货架(数组)
String[] packages = new String[5];
// 往0号格子放快递
packages[0] = "张三的键盘";
// 1号格子放鼠标
packages[1] = "李四的鼠标";
二、数组的十八般武艺
2.1 创建数组的三种姿势
- 先声明后初始化(老司机常用):
int[] scores; // 声明
scores = new int[3]; // 初始化
- 一步到位法(推荐新手):
double[] prices = new double[10];
- 直接赋值法(适合已知元素):
char[] vowels = {'a','e','i','o','u'};
// 注意!这里用的是花括号{}
2.2 数组必杀技——遍历
最常用的三种遍历方式:
- 普通for循环(精准控制):
for(int i=0; i<vowels.length; i++){
System.out.println(vowels[i]);
}
- 增强for循环(简洁优雅):
for(char c : vowels){
System.out.println(c);
}
- Arrays.toString(快速打印):
System.out.println(Arrays.toString(vowels));
// 输出:[a, e, i, o, u]
2.3 数组排序大法
手把手教数组排序(超级实用):
int[] nums = {3,1,4,1,5};
Arrays.sort(nums); // 原地排序
System.out.println(Arrays.toString(nums));
// 输出:[1, 1, 3, 4, 5]
2.4 二维数组(套娃预警)
二维数组就是数组中的数组:
// 创建3x3的棋盘
char[][] chessBoard = new char[3][3];
// 中间下黑子
chessBoard[1][1] = '●';
遍历二维数组的正确姿势:
for(int i=0; i<chessBoard.length; i++){
for(int j=0; j<chessBoard[i].length; j++){
System.out.print(chessBoard[i][j]+" ");
}
System.out.println();
}
三、新手避坑指南(血泪教训)
3.1 数组长度不可变(重要!)
int[] arr = new int[5];
arr.length = 10; // 报错!数组长度是final的
解决方案:用ArrayList替代固定长度数组
3.2 索引越界(最常见的错误)
int[] arr = new int[3];
System.out.println(arr[3]); // 报错!索引范围是0-2
千万注意!!!数组索引从0开始,最大索引是长度-1
3.3 数组复制陷阱
直接赋值是引用传递:
int[] a = {1,2,3};
int[] b = a; // 两个变量指向同一个数组
b[0] = 666;
System.out.println(a[0]); // 输出666!
正确复制方法:
int[] b = Arrays.copyOf(a, a.length);
// 或者
System.arraycopy(a, 0, b, 0, a.length);
四、实战演练(真实案例)
案例1:班级成绩统计
// 录入5位同学成绩
double[] scores = new double[5];
Scanner sc = new Scanner(System.in);
for(int i=0; i<scores.length; i++){
System.out.print("请输入第"+(i+1)+"位同学成绩:");
scores[i] = sc.nextDouble();
}
// 计算平均分
double sum = 0;
for(double score : scores){
sum += score;
}
System.out.println("平均分:"+(sum/scores.length));
案例2:抽奖程序
String[] names = {"张三","李四","王五","赵六"};
Random rand = new Random();
int luckyIndex = rand.nextInt(names.length);
System.out.println("中奖的是:"+names[luckyIndex]);
五、数组进阶小技巧
5.1 数组转List
String[] arr = {"Java","Python","C++"};
List<String> list = Arrays.asList(arr);
// 注意:这个List是固定长度的!
5.2 数组填充
int[] arr = new int[10];
Arrays.fill(arr, 100); // 所有元素都变成100
5.3 数组比较
int[] a = {1,2,3};
int[] b = {1,2,3};
System.out.println(a.equals(b)); // false!
System.out.println(Arrays.equals(a, b)); // true
六、总结与建议
数组作为Java最基础的数据结构,虽然简单但处处是坑(别问我怎么知道的🌚)。给新手的建议:
- 多练习数组的各种操作(遍历、排序、查找)
- 注意数组长度不可变的特性
- 遇到复杂需求时,优先考虑集合框架(如ArrayList)
- 善用Arrays类的工具方法(能省很多事)
最后送大家一句话:数组用得好,BUG少不少!下次咱们再聊聊更刺激的集合框架,保证让你打开新世界的大门~