从ArrayList中删除重复项?

3
如何从ArrayList中删除重复项?
我有一个名为getCcnptags的数组,它的值是[java,php,c++,c,java,php],我从bean数组中获取它,并给每个数组变量提供超链接,但我想在添加超链接之前删除重复项,是否可以在下面的代码中添加任何代码来删除重复项?请保留HTML标记。
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>
}

当然可以,只需将每个字符串放入哈希集中,然后在创建锚点之前检查哈希集即可。你的代码格式相当混乱,可能需要整理一下。 - William Morrison
可能是[如何从ArrayList中删除重复元素?]的重复问题(https://dev59.com/MHVC5IYBdhLWcg3wtzoQ)。 - Raedwald
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

3
使用Set接口,一个不包含重复元素的集合。
ArrayList创建Hashset并使用它。 Collection对象有一个构造函数,接受Collection对象来初始化值。
ArrayList yourlist= new ArrayList();
HashSet nodupesSet= new HashSet(yourlist);

现在遍历 nodupesSet

0

我在网上找到了这个。它与从向量中删除元素类似,但方法名称有所改变。

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);
                        }
                    }
            }
        }
    */

}

不错!但是使用现有的有用选项比重新实现更好 :), 仍然值得。 - Suresh Atta
嗯。是的!自己编写代码会很棒,但利用现有的代码也很聪明!你觉得呢? - JavaTechnical
您说的没错,如果我们一切都要自己实现,那代码量会不断增加,但是这样做会让我们感觉很棒。 - Suresh Atta
1
这就是为什么我说使用现有的很聪明!;) - JavaTechnical

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()方法。否则,这种方法将无法正常工作。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接