我是 Java 的新手,我一直在尝试解决以下问题,但没有成功。
编写一个 Java 方法,从给定列表中删除重复项。
假设:
- 方法接受类型列表
- 返回类型是
void
- 使用
equals()
确定重复项
主要内容:
- 创建一个 List 实例并用重复的 String 值加载它
- 调用
removeDuplicates()
,传入这个列表 - 将修改后的列表输出到控制台。
我可以通过将列表传递给新的 HashSet 并将其复制回来来解决问题。 但问题是:
- 问题要求我使用
equals()...
解决它 - 如果返回类型是
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/