先排序再跳过相邻重复可高效剔除整型数组重复元素:先用Arrays.sort()使重复元素相邻,再用writeIndex控制写入位置单次遍历去重,最后用Arrays.copyOf截取有效部分,避免装箱开销。

用流程控制配合 Arrays 工具类剔除整型数组重复元素,核心在于“先排序、再跳过相邻重复”,不依赖集合类也能高效完成。关键不是硬套工具方法,而是让排序为去重服务,再用简单循环跳过重复项。
先用 Arrays.sort() 排序,让重复元素相邻
整型数组本身无序,重复值可能散落各处。调用 Arrays.sort(nums) 后,相同数字会挨在一起,这是后续跳过重复的前提。注意:该方法直接修改原数组,无需额外空间。
单次遍历跳过相邻重复,用下标控制写入位置
定义一个 writeIndex 指向去重后数组的当前可写位置(初始为 0)。从索引 1 开始遍历,只在 nums[i] != nums[i-1] 时,把 nums[i] 赋给 nums[writeIndex++]。这样既避免了多次数组复制,又保留了去重后的紧凑结构。
- 首元素一定保留,所以结果数组长度至少为 1
- 遍历结束后,
writeIndex就是去重后有效长度 - 若需新数组,用
Arrays.copyOf(nums, writeIndex)截取
完整示例代码(含注释)
// 输入:int[] nums = {3, 1, 4, 1, 5, 9, 2, 6, 5};
// 步骤 1:排序 → {1, 1, 2, 3, 4, 5, 5, 6, 9}
// 步骤 2:遍历去重 → {1, 2, 3, 4, 5, 6, 9, 6, 9},有效长度 = 7
// 步骤 3:截取 → Arrays.copyOf(nums, 7)
为什么不直接用 Arrays.asList() 配合 LinkedHashSet?
虽然一行能写完:new ArrayList(new LinkedHashSet(Arrays.asList(arr))),但对 int[] 会触发自动装箱,生成大量 Integer 对象,时间和内存开销大。原生数组 + 排序 + 双指针式遍历,零对象创建,更适合性能敏感或大数据量场景。


















