例如,
我有ArrayList
这样,
List<String> list=new ArrayList<String>();
list.add("A");
list.add("B");
list.add("C");
list.add("D");
list.add("A");
list.add("C");
list.add("A");
list.add("D");
list.add("C");
list.add("D");
我只想知道是否有任何内置方法可以找到重复值。?
答案 0 :(得分:3)
Set的方法add返回一个布尔值,表示值是否已存在(如果不存在则为true;如果已存在则为false。
所以只需遍历所有值:
public Set<Integer> findDuplicates(List<Integer> listContainingDuplicates)
{
final Set<Integer> setToReturn = new HashSet();
final Set<Integer> set1 = new HashSet();
for (Integer yourInt : listContainingDuplicates)
{
if (!set1.add(yourInt))
{
setToReturn.add(yourInt);
}
}
return setToReturn;
}
答案 1 :(得分:2)
ArrayList中没有这样的方法。您可以使用Map来检测重复项。
Map<String, Integer> map = new HashMap<>();
...
Integer n = map.get(s);
map.put(s, n == null ? 1 : n + 1);
答案 2 :(得分:1)
你可以这样做。
int count = Collections.frequency(list,"A");
if(count>1)
System.out.println(count);
更新
List<String> duplicates= new ArrayList<String>();
for (String string : list) {
if(Collections.frequency(list,string)>1&&!duplicates.contains(string)){
duplicates.add(string);
}
}
System.out.println(duplicates);
<强>输出强>
[A, C, D]
答案 3 :(得分:1)
您可以使用Set.add(...)
返回值。如果集合已包含要添加的值,则Add将返回false。以下是您使用它的方式:
void printDuplicates(List<String> data) {
Set<String> uniques = new HashSet<String>(data.size() * 2);
for (String s: data) {
if (!uniques.add(s)) {
System.out.println("Duplicate: " + s);
}
}
}