如何在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
相关产品推荐
相关产品推荐

