0

我有一个arrayList(名为error_dub)我只想打印一次重复这是我的代码

for(x=0 ; x<=error_dub.size()-1 ; x++){

     for(int h=x+0 ; h<=error_dub.size() ; h++){

            if(error_dub.get(x).equals(error_dub.get(h) && x!=h){

                 System.out.println(error_dub.get(x)+" is duplicated ");
              }
       }
  } 

在这里,这条线被打印了不止一次,那么我怎么能只打印一次呢?

4

4 回答 4

7

使用两组(假设X是您的对象的类):

// Returns a set of all duplicates in a list
public Set<X> getDuplicates(final List<X> list)
{
    final Set<X> dups = new HashSet<X>();
    final Set<X> set = new HashSet<X>();

    /*
     * Cycle through all elements in the original list. Add it to "set":
     *
     * - if the .add() method returns true, this is the first time the element is seen;
     * - if it returns false, then this is not the first time, it is a duplicate:
     *   add it to "dups".
     */
    for (final X element: list)
        if (!set.add(element))
            dups.add(element);

    return dups;
}

如果操作未修改集合,则集合.add()将返回 false ,这意味着元素是否已经存在。

将该函数复制/粘贴到您现有的代码中,并将上面的代码段替换为:

for (final X dup: getDuplicates(error_dub))
    System.out.println(dup + " is duplicated");

重要说明getDuplicates()编写的函数不会尊重元素顺序。如果顺序对您很重要,请dups用 aLinkedHashSet而不是 a替换HashSet

于 2012-12-24T12:26:25.680 回答
0

您可以使用.add()set 方法检查重复项。下面发布的方法将列表元素添加到 set1。如果元素是重复的(.add()返回 true),则将元素添加到setToReturn

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;
}
于 2012-12-24T12:31:12.497 回答
0
    ArrayList<String> ar=new ArrayList<String>();
    ArrayList<String> ar2=new ArrayList<String>();

    ar.add("1");
    ar.add("2");
    ar.add("3");
    ar.add("4");
    ar.add("5");
    ar.add("1");
    ar.add("2");
    ar.add("1");

    for(int x=0;x<ar.size();x++)
    {
        if(!ar2.contains(ar.get(x)))
        {
             for(int y=x+1;y<ar.size()-1;y++)
            {

                  if((ar.get(y).equals(ar.get(x))))
                {
                    System.out.print("repeating "+ar.get(x));
                    ar2.add(ar.get(x));
                    break;

                }  


            } 

        } 

    }

你可以这样做。

于 2012-12-24T13:00:07.073 回答
-1
//method to identify the duplicate elements in array list
import java.util.ArrayList;
import java.util.HashSet;
import java.util.Scanner;
public class Dup 
{
public static void main(String[] args)
{
ArrayList<Integer> a=new ArrayList<Integer>();
System.out.println("enter elements");
int g;
Scanner b= new Scanner(System.in);
for(int i=0;i<10;i++)
{
g=b.nextInt();   
a.add(g);
}
HashSet<Integer> c=new HashSet<Integer>();
ArrayList<Integer> d=new ArrayList<Integer>();
for (Integer y : a)
{
if (c.contains(y))
{
d.add(y);
}
else
c.add(y);
}
System.out.println("original elements are:"+c);
System.out.println("duplicate elements are:");
for(Integer h:d)
{
System.out.println(h);
}
}
}
于 2015-09-05T05:29:56.690 回答