在arraylist中查找和打印重复值的最有效方法是什么?

时间:2013-12-07 04:53:40

标签: java collections

例如,

我有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");

我只想知道是否有任何内置方法可以找到重复值。?

4 个答案:

答案 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);
    }
  }
}