在javadocs中,概述了一个将从集合中删除重复项的FindDups2类。我将代码复制到IntelliJ中,但现在我不知道该怎么称呼它。我在同一个文件夹中的另一个类中创建了一个arrayList,并尝试在我的arrayList类中调用FindDups2,并尝试在FindDups2类中使用arrayList。
我很困惑,因为如果它是一个方法,我会知道如何调用它,但我不知道如何在另一个类(FindDups2)的类(allFriends)的实例上调用一个类(arrayList)。我也很困惑,因为FindDups类没有构造函数。我的直觉是将我的数组列表实例(allFriends)实例化为FindDups类中的实例变量,然后在findDups类中调用它。
PS --这是我第一次在stackOverflow上发帖,我是一个编程新手,所以请友好一点,如果我错过了任何社区规范,请告诉我!
这是我从javadocs得到的代码
import java.util.*;
/**
* This program removes all duplicate items in a set
* & prints out which words were unique & which were dups.
*/
public class FindDups {
public arrayList allFriends;
public static void main(String[] args) {
Set<String> uniques = new HashSet<String>();
Set<String> dups = new HashSet<String>();
for (String a : args)
if (!uniques.add(a))
dups.add(a);
// Destructive set-difference
uniques.removeAll(dups);
System.out.println("Unique words: " + uniques);
System.out.println("Duplicate words: " + dups);
}
}发布于 2022-10-25 06:23:47
这段代码的编写方式并不容易在更大的程序中重用。它只能从命令行运行。有些重构是使其成为可重用方法所必需的。这里有一种可能性:
import java.util.*;
/**
* This program removes all duplicate items in a set
* & prints out which words were unique & which were dups.
*/
public class FindDups {
public static void main(String[] args) {
List<String> words = Arrays.asList(args);
Result result = findDups(words);
System.out.println("Unique words: " + result.uniques);
System.out.println("Duplicate words: " + result.dups);
}
public static class Result {
final Set<String> uniques;
final Set<String> dups;
public Result(Set<String> uniques, Set<String> dups) {
this.uniques = uniques;
this.dups = dups;
}
}
public static Result findDups(List<String> words) {
Set<String> uniques = new HashSet<String>();
Set<String> dups = new HashSet<String>();
for (String word : words)
if (!uniques.add(word))
dups.add(word);
// Destructive set-difference
uniques.removeAll(dups);
return new Result(uniques, dups);
}
}然后,可以将它从另一个类中用于:
FindDups.Result result = FindDups.findDups(allFriends);注意,它不需要在Java类中定义显式构造函数。如果未提供构造函数,则编译器将生成默认的零参数构造函数。在这种情况下,因为不需要实例化类,所以最好定义一个显式的private构造函数,这样就不允许尝试使用new FindDups()创建构造函数。
其他说明:
FindDups,则可以删除它的main方法。findDups方法复制到您自己的类中可能更适合您的项目,而不是拥有这个FindDups类。findDups返回一个或另一个Set<String>值来简化,而不是使用嵌套的Result类(在这种情况下可以删除)。如果您只需要惟一的值,我还会将该方法重命名为findUniques、findUniqueValues或对使用它的上下文更有意义的东西。https://stackoverflow.com/questions/74175172
复制相似问题