一、数组基础与核心操作
数组是Java中最基础且高效的线性数据结构,支持O(1)时间复杂度的随机访问。
// 声明与初始化
int[] nums = new int[5]; // 动态初始化(默认值0)
String[] names = {"Alice", "Bob"}; // 静态初始化
// 遍历与访问
for (int i = 0; i < nums.length; i++) {
nums[i] = i * 2; // 赋值操作
}
for (int num : nums) { // 增强for循环
System.out.print(num + " "); // 输出: 0 2 4 6 8
}
二、多维数组与内存布局
多维数组本质是“数组的数组”,内存连续分配优化访问速度。
// 二维数组动态初始化
int[][] matrix = new int[3][4];
matrix[1][2] = 5; // 第二行第三列赋值
// 锯齿数组(每行长度不同)
int[][] jagged = new int[3][];
jagged[0] = new int[2];
jagged[1] = new int[3]; // 灵活的内存使用
三、高性能操作与工具类
java.util.Arrays 提供丰富的数组操作方法:
int[] data = {3, 1, 4, 2};
// 并行排序(利用多核)
Arrays.parallelSort(data); // 结果: [1, 2, 3, 4]
// 二分查找(需先排序)
int index = Arrays.binarySearch(data, 3); // 返回2
// 快速填充/复制
Arrays.fill(data, 0); // 所有元素置0
int[] copy = Arrays.copyOf(data, 10); // 扩容复制
四、数组 vs 集合:性能关键点
|
特性 |
数组 |
ArrayList |
|
随机访问速度 |
⚡️ O(1) 极快 |
O(1) |
|
内存开销 |
✅ 更低(无对象封装) |
❌ 较高(每个元素包装) |
|
动态扩容 |
❌ 需手动复制 |
✅ 自动扩容 |
|
类型安全 |
❌ 运行时可能ArrayStoreException |
✅ 编译时泛型检查 |
应用场景建议:高频随机访问、固定大小数据(如坐标计算、图像像素处理)优先用数组;需频繁增删时选ArrayList。
五、高级技巧与最佳实践
- 类型安全
使用泛型数组需谨慎(推荐ArrayList替代):
// 安全创建泛型数组示例
List<String>[] lists = (List<String>[]) new List<?>[10];
- 内存控制
大数组可考虑ByteBuffer直接内存分配(减少GC压力)。 - 数组复用
对象池中复用数组降低GC频率(如游戏开发)。 - JNI交互
本地方法(C/C++)通过JNI直接操作Java数组,避免数据拷贝。
结语:
掌握Java数组的底层机制与高效操作,是优化性能敏感代码的关键。在微服务、高并发及实时系统中,合理选择数组能显著提升吞吐量。建议通过JMH基准测试验证实际场景性能,让数据驱动技术决策!
534

被折叠的 条评论
为什么被折叠?



