java虽无显式指针,但用索引变量(如i)模拟指针行为:i作游标,arr[i]相当于解引用,i++相当于指针移动,适用于查找、双端操作等场景。

Java 本身没有显式指针语法,但“指针思想”在数组遍历中体现为用变量(如索引或引用)模拟指针的移动、定位与解引用行为。实际开发中,这种思想常用于高效查找、双端操作、原地修改等场景,关键在于用整型变量代表“逻辑指针”,通过加减偏移来访问元素。
用索引模拟单指针遍历
这是最基础的指针思想落地方式:把 i 当作指向当前元素的“游标”,像 C 中的 int *p 一样前进、回退或跳转。
- 遍历时不硬编码索引值,而是统一用
i表达位置关系,例如arr[i]相当于*p,i++相当于p++ - 适合带条件中断的遍历,比如找第一个偶数:
for (int i = 0; i - 注意边界控制——
i必须始终满足0 ≤ i ,否则抛 <code>ArrayIndexOutOfBoundsException
左右指针:处理对称性或收敛类问题
定义两个索引变量分别从首尾向中间靠拢,模拟两个指针相向而行,常用于反转、两数之和、回文判断等。
- 初始化:
int left = 0, right = arr.length - 1 - 循环条件通常是
left ,每次迭代后 <code>left++、right-- - 典型应用:反转数组 —— 交换
arr[left]和arr[right],直到指针相遇 - 若需提前退出(如找到目标值),可在循环体内加入
break或返回逻辑
快慢指针:解决重复剔除或序列压缩问题
两个索引以不同步长移动,慢指针标记“结果区”末尾,快指针负责扫描和筛选,本质是原地构建新序列。
- 常见模式:慢指针
slow初始为 0,快指针fast从 0 开始遍历;当arr[fast]满足保留条件时,赋值给arr[slow++] - 实例:删除数组中所有值为
val的元素,返回新长度:if (arr[fast] != val) arr[slow++] = arr[fast]; - 最终
slow即为有效元素个数,前slow项即为清理后的数组 - 该方法避免额外空间,时间复杂度仍为 O(n)
结合条件与指针位移的实战技巧
真正体现“指针思想”的地方,在于根据业务逻辑动态调整索引步长或方向,而非固定递增。
- 跳跃式遍历:如每隔 3 个取一个元素,用
i += 3替代i++ - 条件驱动位移:在字符串中找单词起始位置,遇到空格就跳过,遇到非空格才开始记录,类似
while (i - 嵌套指针配合:外层指针定起点,内层指针探测连续段长度(如找最长连续子数组)
- 避免越界是底线——每次使用
arr[i]前,确保i在合法范围内,尤其在修改i后立即校验
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











