java - 使用等号删除 List<String> 重复项

标签 java list duplicates equals

我是 Java 的新手,我一直在尝试解决以下问题,但没有成功。

编写一个 Java 方法,从给定列表中删除重复项。

假设:

  1. 方法接受类型列表
  2. 返回类型是void
  3. 使用 equals() 确定重复项

主要内容:

  1. 创建一个 List 实例并用重复的 String 值加载它
  2. 调用removeDuplicates(),传入这个列表
  3. 将修改后的列表输出到控制台。

我可以通过将列表传递给新的 HashSet 并将其复制回来来解决问题。 但问题是:

  1. 问题要求我使用 equals()... 解决它
  2. 如果返回类型是void,我如何在main中输出它?

导入java.util.*; 公共(public)课问题 1 {

    public static void main(String[] args) {
String[] words = {"good","better", "best", "best", "first" , "last", "last", "last", "good"};  
        List<String> list = new ArrayList<String>();  
        for (String s : words) {  
            list.add(s);  
        }  
        removeDuplicates(list);
    }
    static void removeDuplicates(List<String> array){
        HashSet<String> hs = new HashSet<>();
        hs.addAll(array);
        array.clear();
        array.addAll(hs);
        for (String x : array){ 
            System.out.println(x);
        }
    }
}

编辑:好吧,这个有效,但如您所见,我没有使用 equals() 并且我是从我的静态方法打印出来的,而不是从 main 打印出来的。 另外,有什么方法可以比使用 String[] 更快地填充列表?

最佳答案

java.util.HashSet 在其 Set.add(Object) 的实现中使用 Object.equals(Object) 来确定插入的元素是唯一的(定义为不等于另一个元素)。 HashSet 还具有允许您在 O(n) 时间内执行重复数据删除过程的优势,而比较天真的方法是将每个元素与 O(n^2) 中的每个其他元素进行比较) 时间。

main 中的代码将看到修改后的列表,因为 List 对象是可变的。当方法更改传入参数的状态时,调用代码将看到这些更改。

关于java - 使用等号删除 List<String> 重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19405643/

相关文章:

java - 用于替换 Java 中的列表成员的迭代器?

php - 在数据库中查找可能的重复项

python - 不使用remove或fromkeys删除重复项;列表切片; Python

c++ - 从字符串中删除重复的字符

java - 像谷歌助手一样通过语音命令启动 Android 应用程序

swift - 如何使用 iOS 9 将单元格 append 到表格 View ?

python - 列表上的 Django lte/gte 查询

java - 使用java列出某个url下的文件名

java - 如何将数据客户端发送到服务器django channel

java - 如何在命令行中设置JVM字符集?