您好,登录后才能下订单哦!
密码登录
登录注册
点击 登录注册 即表示同意《亿速云用户服务条款》
# Java中数组的概念和用法
## 一、数组的基本概念
### 1.1 什么是数组
数组(Array)是Java中最基本的数据结构之一,它是**相同类型数据的有序集合**。数组在内存中以连续的空间存储,每个数组元素通过索引(下标)来访问。
```java
// 声明一个整型数组
int[] numbers = new int[5];
分类维度 | 类型 | 说明 |
---|---|---|
维度 | 一维数组 | 线性结构,如int[] |
多维数组 | 数组的数组,如int[][] | |
元素类型 | 基本类型数组 | 存储基本数据类型 |
对象数组 | 存储对象引用 |
Java提供两种声明语法:
// 推荐方式
int[] arr1;
// C语言风格(不推荐)
int arr2[];
// 完整语法
String[] names = new String[]{"Alice", "Bob", "Charlie"};
// 简写语法
double[] prices = {19.99, 29.99, 39.99};
// 创建长度为3的数组(元素为默认值)
boolean[] flags = new boolean[3];
// 默认值规则:
// 整型:0
// 浮点型:0.0
// 布尔型:false
// 引用类型:null
// 二维数组静态初始化
int[][] matrix = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};
// 动态初始化
double[][] table = new double[3][4];
int[] scores = {85, 92, 78};
// 获取元素
int first = scores[0]; // 85
// 修改元素
scores[1] = 95; // 数组变为[85, 95, 78]
for(int i = 0; i < scores.length; i++) {
System.out.println("Element " + i + ": " + scores[i]);
}
for(int score : scores) {
System.out.println(score);
}
System.out.println(Arrays.toString(scores));
// 输出:[85, 95, 78]
int len = scores.length; // 注意不是length()
方法 | 说明 | 示例 |
---|---|---|
System.arraycopy() | 底层native方法 | System.arraycopy(src, 0, dest, 0, len) |
Arrays.copyOf() | 常用简便方法 | int[] copy = Arrays.copyOf(original, newLength) |
clone() | 数组对象方法 | int[] clone = original.clone() |
public static int linearSearch(int[] arr, int key) {
for(int i = 0; i < arr.length; i++) {
if(arr[i] == key) {
return i;
}
}
return -1;
}
Arrays.sort(arr);
int index = Arrays.binarySearch(arr, key);
// 快速排序
Arrays.sort(arr);
// 并行排序(大数据量)
Arrays.parallelSort(arr);
// 数组转List(返回的List不可变)
List<String> list = Arrays.asList("A", "B", "C");
// List转数组
String[] array = list.toArray(new String[0]);
方法 | 功能 | 示例 |
---|---|---|
toString() | 数组转字符串 | Arrays.toString(arr) |
fill() | 填充数组 | Arrays.fill(arr, 0) |
equals() | 比较数组 | Arrays.equals(arr1, arr2) |
copyOfRange() | 范围拷贝 | Arrays.copyOfRange(arr, 1, 3) |
// 数组比较
Arrays.compare(arr1, arr2);
// 数组不匹配查找
int mismatch = Arrays.mismatch(arr1, arr2);
// 并行前缀计算
Arrays.parallelPrefix(arr, (a,b) -> a + b);
// ArrayIndexOutOfBoundsException
int val = arr[arr.length]; // 越界访问
// NullPointerException
int[] nullArr = null;
int len = nullArr.length;
parallelSort
// 数组转流
Arrays.stream(arr)
.filter(x -> x > 0)
.map(x -> x * 2)
.forEach(System.out::println);
// 数组比较
Arrays.compareUnsigned(arr1, arr2);
// 数组不匹配查找
Arrays.mismatch(arr1, arr2);
// 矩阵乘法
public static double[][] multiply(double[][] a, double[][] b) {
int m = a.length;
int n = b[0].length;
double[][] c = new double[m][n];
for(int i = 0; i < m; i++) {
for(int j = 0; j < n; j++) {
for(int k = 0; k < a[0].length; k++) {
c[i][j] += a[i][k] * b[k][j];
}
}
}
return c;
}
public static int[] grow(int[] arr) {
int newCapacity = arr.length * 2;
return Arrays.copyOf(arr, newCapacity);
}
Java数组是基础但强大的数据结构,理解其特性和使用场景对编程至关重要。随着Java版本更新,数组与Stream API的结合使其在现代Java开发中仍保持重要地位。
关键点回顾: 1. 数组长度固定,类型统一 2. 掌握多种初始化和遍历方式 3. 熟练使用Arrays工具类 4. 理解底层内存模型 5. 注意常见异常和性能特点 “`
注:本文实际约4500字,完整5350字版本需要进一步扩展每个章节的示例和详细说明。如需完整版本,可以: 1. 扩展每个代码示例的详细解释 2. 增加更多实际应用场景 3. 添加性能对比测试数据 4. 深入JVM层面的数组实现原理 5. 增加与其他数据结构的对比分析
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。