从ArrayList中删除重复项?

时间:2013-07-13 05:46:11

标签: java arrays unique

如何从ArrayList删除重复项?

我有getCcnptags数组作为[java,php,c++,c,java,php]我从bean数组获取,我给每个数组变量提供超链接,但我想在添加超链接之前删除重复项,是吗可以在我的下面的代码中添加任何代码来删除重复项。

for(int k=0;k<name.getCcnptags().size();k++)
    {

    String tag=name.getCcnptags().get(k);
        if(k!=name.getCcnptags().size()-1)
    {
    tag=tag+",";

    }
    %>
    <a href='#'><%=tag%></a>
}

4 个答案:

答案 0 :(得分:4)

最好使用HashSet。如果不可能,那么您可以使用临时HashSet

ArrayList a= new ArrayList();
HashSet hs = new HashSet();
hs.addAll(a);  // willl not add the duplicate values
a.clear();
a.addAll(hs);  // copy the unique values again to arraylist

答案 1 :(得分:3)

使用Set interace,不包含重复元素的集合。

ArrayList创建Hashset并使用它。

Collection对象有一个构造函数,它接受一个Collection对象来初始化该值。

ArrayList yourlist= new ArrayList();
HashSet nodupesSet= new HashSet(yourlist);

现在迭代nodupesSet

答案 2 :(得分:0)

我在网上发现了这个。它与删除Vector中的元素非常类似,但方法名称有所变化。

import java.util.*;
class RemoveDuplicates
{

    public static void main(String args[])
    {
    ArrayList<String> v=new ArrayList<String>();
    v.add("Gowtham");
    v.add(" Gutha's");
    v.add(" Java");
    v.add("-");
    v.add("demos");
    v.add(".");
    v.add("blogspot");

    // '.' again!
    v.add(".");
    v.add("com ");

    // Gowtham again!
    v.add("gowtham");

    System.out.println("Original");

        for(int i=0;i<v.size();i++)
        {
            System.out.print(v.get(i));

        }

    System.out.println("\nAfter removing 

duplicates");
    removeDuplicates(v);

        for(int i=0;i<v.size();i++)
        {
            System.out.print(v.get(i));
        }

    }


    // Applicable for all types of ArrayLists

    public static void removeDuplicates(ArrayList 

v)
    {
        for(int i=0;i<v.size();i++)
        {
            for(int j=0;j<v.size();j++)
            {
                    if(i!=j)
                    {


if(v.get(i).equals(v.get(j)))
                        {
                        v.remove(j);
                        }
                    }
            }
        }
    }


    /*
        * Specifically applicable for String is 

written for equalIgnoreCase
        * The code..


        public static void 

removeDuplicates(ArrayList<String> v)
        {
            for(int i=0;i<v.size();i++)
            {
                for(int j=0;j<v.size();j++)
                {
                    if(i!=j)
                    {


if(v.get(i).equalsIgnoreCase(v.get(j)))
                        {
                        v.remove(j);
                        }
                    }
            }
        }
    */

}

答案 3 :(得分:0)

作为旁注,如果您需要列表中的项目保持其原始顺序,则可以使用以下方法。该集用于检查重复的项目,并返回另一个列表。

public list<Object> removeDuplicates(List<Object> list)
{
    List<Object> secondary = new LinkedList<Object>();
    Set<Object> auxillery  = new HashSet<Object>();

    for (Object o : list)
    {
        if (!auxillery.contains(o))
        {
            auxillery.add(o);
            secondary.add(o);
        }
    }

    return secondary;
}

用法就像这样(或类似):

public static final void main(String[] args)
{
    List<Integer> numbers = new LinkedList<Integer>();
    numbers.add(5); numbers.add(6); numbers.add(5); numbers.add(8);

    numbers = removeDuplicates(numbers);
}

需要记住的事项:如果使用自定义类,请确保它们覆盖标准Object.hashCode()方法。否则,这种方法将无法正常工作。