我有一个名称数组列表,我想查看重复的值(如果存在)并打印该值。问题是我对是否使用 contains 方法感到困惑,下面的代码不起作用。
ArrayList<String> list=new ArrayList();
list.add("Sagio Mane");
list.add("Karius");
list.add("Mo Salah");
list.add("Firmino");
list.add("Lovren");
list.add("Steven Gerrard");
list.add("Karius");
list.add("Mo Salah");
for(int i =0; i < list.size(); i++) {
if list.contains(list.get(i)) {
System.out.println(list.get(i)+" is duplicated")
}
}
Run Code Online (Sandbox Code Playgroud)
这应该打印“karius is duplicated”
如果您使用的是 Java 8+,您可以使用:
//Get frequencies of each element
Map<String, Long> frequencies = list.stream()
.collect(Collectors.groupingBy(Function.identity(), Collectors.counting()));
//then filter only the inputs which have frequency great than 1
frequencies.entrySet().stream()
.filter(entry -> entry.getValue() > 1)
.forEach(entry -> System.out.println(entry.getKey()));
Run Code Online (Sandbox Code Playgroud)
输出
Karius
Mo Salah
Run Code Online (Sandbox Code Playgroud)
尝试这个工作代码:
ArrayList<String> list = new ArrayList<String>();
list.add("Sagio Mane");
list.add("Karius");
list.add("Mo Salah");
list.add("Firmino");
list.add("Lovren");
list.add("Steven Gerrard");
list.add("Karius");
list.add("Mo Salah");
Set<String> s = new HashSet<String>();
for(String name : list) {
if(s.add(name) == false)
System.out.println(name + "is duplicated");
}
Run Code Online (Sandbox Code Playgroud)
输出:
Kariusis duplicated
Mo Salahis duplicated
Run Code Online (Sandbox Code Playgroud)
如果你想以空间为代价来降低一些时间复杂度O(n),你可以使用Set
Set<String> set = new HashSet<>();
for(int i =0; i < list.size(); i++) {
if (set.contains(list.get(i))) {
System.out.println(list.get(i)+" is duplicated");
} else set.add(list.get(i));
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
38140 次 |
| 最近记录: |