删除Vector数据结构中的重复项

时间:2013-09-07 23:29:41

标签: java data-structures vector duplicates

我有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);
                                }
                        }
                }
                                   }
} 

任何想法?

6 个答案:

答案 0 :(得分:1)

在考虑如何删除重复项时,请先考虑Set。根据定义,Set

  

不包含重复元素的集合。

迭代您的数组并将其添加到Set实现中。如果订单很重要,请使用LinkedHashSet

Set中的元素将是唯一的。您可以将它们添加回新的Listclear()旧版本,然后将其添加到那里。

注意:您应该在hashCode()课程中实施equals(Object)objet_poid_n方法。

注2:如果Vector表示java.util.Vector,请不要使用它。使用ArrayListLinkedList

答案 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)

删除数组中的元素将改变大小,您将尝试访问不再存在的索引。

最简单的解决方案是:

  1. hashcode
  2. 中实施equals / objet_poid_n
  3. HashSet
  4. 中添加所有元素

    然后您的Set将只包含每个元素的一个实例。

    如有必要,请阅读hashcode / equalsHashSet。值得你花时间。

答案 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;