首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在FindDups2实例上实现Javadocs ArrayList方法

如何在FindDups2实例上实现Javadocs ArrayList方法
EN

Stack Overflow用户
提问于 2022-10-23 22:12:26
回答 1查看 32关注 0票数 -1

在javadocs中,概述了一个将从集合中删除重复项的FindDups2类。我将代码复制到IntelliJ中,但现在我不知道该怎么称呼它。我在同一个文件夹中的另一个类中创建了一个arrayList,并尝试在我的arrayList类中调用FindDups2,并尝试在FindDups2类中使用arrayList。

我很困惑,因为如果它是一个方法,我会知道如何调用它,但我不知道如何在另一个类(FindDups2)的类(allFriends)的实例上调用一个类(arrayList)。我也很困惑,因为FindDups类没有构造函数。我的直觉是将我的数组列表实例(allFriends)实例化为FindDups类中的实例变量,然后在findDups类中调用它。

PS --这是我第一次在stackOverflow上发帖,我是一个编程新手,所以请友好一点,如果我错过了任何社区规范,请告诉我!

这是我从javadocs得到的代码

代码语言:javascript
复制
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);
    }
}
EN

回答 1

Stack Overflow用户

发布于 2022-10-25 06:23:47

这段代码的编写方式并不容易在更大的程序中重用。它只能从命令行运行。有些重构是使其成为可重用方法所必需的。这里有一种可能性:

代码语言:javascript
复制
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);
    }
}

然后,可以将它从另一个类中用于:

代码语言:javascript
复制
FindDups.Result result = FindDups.findDups(allFriends);

注意,它不需要在Java类中定义显式构造函数。如果未提供构造函数,则编译器将生成默认的零参数构造函数。在这种情况下,因为不需要实例化类,所以最好定义一个显式的private构造函数,这样就不允许尝试使用new FindDups()创建构造函数。

其他说明:

  1. 如果您不需要从您自己的项目中的命令行运行FindDups,则可以删除它的main方法。
  2. findDups方法复制到您自己的类中可能更适合您的项目,而不是拥有这个FindDups类。
  3. 如果您不需要同时知道唯一的单词和重复的单词,这可以通过让findDups返回一个或另一个Set<String>值来简化,而不是使用嵌套的Result类(在这种情况下可以删除)。如果您只需要惟一的值,我还会将该方法重命名为findUniquesfindUniqueValues或对使用它的上下文更有意义的东西。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74175172

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档