3

如何从 中删除重复项ArrayList

我有从beangetCcnptags数组[java,php,c++,c,java,php]中获取的数组,并且我正在为每个数组变量提供超链接,但是我想在添加超链接之前删除重复项,是否可以在下面的代码中添加任何代码以删除重复项.

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

4 回答 4

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
于 2013-07-13T05:47:46.470 回答
3

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

ArrayList创建Hashset和使用它。

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

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

现在迭代 nodupesSet

于 2013-07-13T05:49:15.523 回答
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);
                        }
                    }
            }
        }
    */

}
于 2013-07-13T05:53:05.113 回答
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()方法。否则,这种方法将无法正常工作。

于 2013-07-13T17:14:29.320 回答