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