You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在ArrayList实例上实现Javadocs中的FindDups2去重功能?

解决方法

原代码的问题在于去重逻辑完全写在main方法里,只能处理命令行参数,没法直接复用处理你自己的ArrayList。要解决这个问题,你需要把核心的去重逻辑抽成一个可调用的方法,而不是局限在main里。

改造后的FindDups类

把去重逻辑封装成静态方法,让其他类可以直接调用:

import java.util.*;

/**
 * 移除集合中的重复元素,区分唯一元素和重复元素
 */
public class FindDups {

    // 可复用的静态方法:接收任意字符串集合,返回包含唯一元素和重复元素的结果
    public static Map<String, Set<String>> findDuplicates(Collection<String> inputCollection) {
        Set<String> uniques = new HashSet<>();
        Set<String> dups = new HashSet<>();

        for (String item : inputCollection) {
            // HashSet的add方法返回false,说明元素已存在
            if (!uniques.add(item)) {
                dups.add(item);
            }
        }

        // 从唯一元素集合中移除所有重复过的元素
        uniques.removeAll(dups);

        Map<String, Set<String>> result = new HashMap<>();
        result.put("unique", uniques);
        result.put("duplicates", dups);
        return result;
    }

    // 保留原main方法,用于命令行测试
    public static void main(String[] args) {
        Map<String, Set<String>> result = findDuplicates(Arrays.asList(args));
        System.out.println("Unique words:    " + result.get("unique"));
        System.out.println("Duplicate words: " + result.get("duplicates"));
    }
}

在你的类中调用处理allFriends

假设你的allFriends在FriendManager类中,直接通过类名调用静态方法即可:

import java.util.ArrayList;
import java.util.Map;
import java.util.Set;

public class FriendManager {
    public static void main(String[] args) {
        // 创建你的ArrayList实例
        ArrayList<String> allFriends = new ArrayList<>();
        allFriends.add("Alice");
        allFriends.add("Bob");
        allFriends.add("Alice");
        allFriends.add("Charlie");
        allFriends.add("Bob");

        // 调用FindDups的静态方法处理集合
        Map<String, Set<String>> result = FindDups.findDuplicates(allFriends);

        // 输出结果
        System.out.println("唯一的好友:" + result.get("unique"));
        System.out.println("重复的好友:" + result.get("duplicates"));
    }
}

额外提示

  • 原代码里的public arrayList allFriends;是错误的:Java类名首字母必须大写(应为ArrayList),而且这个变量在原逻辑中没有被使用,改造时可以直接删除。
  • 如果你的集合元素不是String,可以把方法改成泛型版本,适配任意类型的集合:
    public static <T> Map<String, Set<T>> findDuplicates(Collection<T> inputCollection) {
        Set<T> uniques = new HashSet<>();
        Set<T> dups = new HashSet<>();
    
        for (T item : inputCollection) {
            if (!uniques.add(item)) {
                dups.add(item);
            }
        }
    
        uniques.removeAll(dups);
    
        Map<String, Set<T>> result = new HashMap<>();
        result.put("unique", uniques);
        result.put("duplicates", dups);
        return result;
    }
    

内容的提问来源于stack exchange,提问作者selena

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 03:50:31