Java 数组
2025/11/30大约 1 分钟
特点
数组是 固定长度、连续内存存储、相同数据类型 的数据结构。
特点:
随机访问 O(1)(可以通过 index 直接访问)
插入/删除代价高 O(n)(因为要移动元素)
适合读多写少的场景
//初始化
int[] arr;
int[] arr = {1,2,3};
int[] arr = new int[3];
//遍历
for(int i = 0;i<arr.length;i++){};
for(int a: arr){};动态数组
它是一个 随着元素数量增长自动扩容的数组结构。
//初始化
ArrayList<Integer> list = new ArrayList<>();
//添加
list.add(10);
//获取
int a = list.get(0);
//修改
list.set(1,100);
//删除
list.remove(2);
//遍历
for(int i : list){};工具类
Arrays.sort(arr);
Arrays.toString(arr);
Arrays.binarySearch(arr,key);内存模型
int[] arr = new int[3];在 JVM 内存中:
| 区域 | 存储内容 |
|---|---|
| 栈(Stack) | arr 引用 |
| 堆(Heap) | new int[3] 创建的数组对象 |
图示:
栈: arr → 引用地址 0x123
堆: [0, 0, 0]`
算法题
我整理了从简单到困难的题型,每个题在 LeetCode 都有。
| 题型 | 面试频率 | 代表题目 |
|---|---|---|
| 最大/最小值、求和 | ⭐⭐⭐⭐⭐ | LC 53 最大子数组和 |
| 双指针 | ⭐⭐⭐⭐⭐ | LC 1 两数之和、LC 15 三数之和、LC 26 去重 |
| 滑动窗口 | ⭐⭐⭐⭐ | LC 3 无重复字符 |
| 二分查找 | ⭐⭐⭐⭐ | LC 704、LC 34 |
| 前缀和 | ⭐⭐⭐⭐ | LC 560 和为 K 的子数组 |
| 排序 + 去重 | ⭐⭐⭐ | LC 88 合并两个有序数组 |
