如何递归实现数组重复元素移除,改造现有Java循环去重代码
Java数组去重逻辑的递归改造实现
适配现有代码的改造思路
你已经写好的重复元素标记逻辑(将重复位置置空的双重循环流程)不需要完全推翻重写,只需要把原本用来收集非空元素的迭代遍历循环替换为递归实现即可,改造后完全保留原有去重规则,不会改变最终输出结果。
递归实现的核心规则如下:
- 固定递归入参:待处理数组、当前遍历到的数组下标、存储去重结果的集合
- 递归终止边界:当遍历下标等于数组总长度时,代表所有元素处理完成,直接返回收集好的结果集合
- 单步递归处理流程:
- 取出当前下标位置的数组元素
- 按照原规则做判定:如果元素不是空占位符、且没有被收录到结果集合中,就将其加入结果
- 下标向后移动一位,带着更新后的结果集合触发下一层递归
可直接运行的递归版本代码
import java.util.ArrayList; import java.util.List; public class Dupe { // 递归去重核心方法 private static List<String> recursiveDedup(String[] arr, int currentIndex, List<String> result) { // 递归终止:遍历完全部数组元素 if (currentIndex == arr.length) { return result; } String currentValue = arr[currentIndex]; // 匹配原空值跳过规则,同时避免重复收录 if (!currentValue.isEmpty() && !result.contains(currentValue)) { result.add(currentValue); } // 递归处理下一个元素 return recursiveDedup(arr, currentIndex + 1, result); } public static void main(String[] args) { String[] arraycar = {"h","i","e","l","o","i","s","e"}; System.out.println("原始数组元素:"); for (String item : arraycar) { System.out.print(item + " "); } System.out.println("\n去重后结果:"); List<String> dedupResult = recursiveDedup(arraycar, 0, new ArrayList<>()); for (String item : dedupResult) { System.out.print(item + " "); } } }
补充提示:你原有代码中使用
==比较字符串值的写法存在逻辑漏洞,递归版本已替换为正确的内容匹配规则,避免受字符串常量池特性影响出现判定误差。
内容的提问来源于stack exchange,提问作者cesar010101
相关产品推荐
相关产品推荐

