在arrayList中只打印一次重复项

时间:2012-12-24 12:23:13

标签: java

我有一个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 个答案:

答案 0 :(得分: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替换为LinkedHashSet而不是HashSet

答案 1 :(得分:0)

您可以使用.add()方法来检查重复项。下面发布的方法将列表元素添加到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;
}

答案 2 :(得分: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;

                }  


            } 

        } 

    }

你可以这样做。

答案 3 :(得分:-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);
}
}
}