我有Vector
,每个单元格都包含Data Structure
:
public class objet_poid_n {
public int Num;
public double Poid;
}
问题是Vector可能有重复,我需要创建一个能够删除重复的函数或过程。 我试过这个,它无能为力..
public static void removeDuplicates(Vector v)
{
for(int i=0;i<v.size();i++){
for(int j=0;j<v.size();j++)
{
if(i!=j)
{
if(v.elementAt(i).equals(v.elementAt(j)))
{
v.removeElementAt(j);
}
}
}
}
}
任何想法?
答案 0 :(得分:1)
在考虑如何删除重复项时,请先考虑Set
。根据定义,Set
是
不包含重复元素的集合。
迭代您的数组并将其添加到Set
实现中。如果订单很重要,请使用LinkedHashSet
。
Set
中的元素将是唯一的。您可以将它们添加回新的List
或clear()
旧版本,然后将其添加到那里。
注意:您应该在hashCode()
课程中实施equals(Object)
和objet_poid_n
方法。
注2:如果Vector
表示java.util.Vector
,请不要使用它。使用ArrayList
或LinkedList
。
答案 1 :(得分:1)
Set<String> set = new HashSet<String>();
set.addAll(list);
list.clear();
list.addAll(set);
答案 2 :(得分:1)
首先,您应该在equals()
中实施objet_poid_n
方法,因为default behavior compares memory addresses.
然后,您可以在向量中插入新对象之前使用方法Vector.contains(),或者使用Set
,根据定义,它是一个没有重复的集合。
答案 3 :(得分:0)
删除数组中的元素将改变大小,您将尝试访问不再存在的索引。
最简单的解决方案是:
hashcode
equals
/ objet_poid_n
HashSet
然后您的Set
将只包含每个元素的一个实例。
如有必要,请阅读hashcode
/ equals
和HashSet
。值得你花时间。
答案 4 :(得分:0)
使用以下方法从vector
中删除dulplicate元素public static Vector removeDuplicateResults(Vector resultsVector) {
for(int i=0;i<resultsVector.size();i++){
for(int j=0;j<resultsVector.size();j++){
if(i!=j){
Object resultsVectorObject1 = resultsVector.elementAt(i);
Object resultsVectorObject2 = resultsVector.elementAt(j);
Object[] resultsObjectArray1 = (Object[]) resultsVectorObject1;
Object[] resultsObjectArray2 = (Object[]) resultsVectorObject2;
if(Arrays.equals(resultsObjectArray1, resultsObjectArray2))
{
resultsVector.removeElementAt(j);
}
}
}
}
return resultsVector;
}
答案 5 :(得分:0)
我可以在我的情况下覆盖add或addAll方法,我将数据用作局部变量:
grant dba on employees to shelby;