0

此代码只是一个测试,用于查找向量的重复项并删除它们,同时删除其他 2 个向量的对应对象

这在第 3 行给出了一个 Arrayoutofindex 作为输出。你有什么建议吗?

        for (int k = 0 ; k < vA.size() ; k++)
            {                       
                Object a = vA.elementAt(0);
                Object b = vA.elementAt(k);
                if(a == b && k!=0)
                {
                int duplicate = vA.indexOf(b);
                vA.removeElementAt(duplicate);
                vB.removeElementAt(duplicate);
                vC.removeElementAt(duplicate);                    
                }
4

4 回答 4

1

根据这个问题,我建议您阅读,因为它解释了从数组中删除重复项的投注方法,

您可以使用以下方法: removeDuplicate 方法:

    /** List order not maintained **/
public static void removeDuplicate(ArrayList arlList)
{
 HashSet h = new HashSet(arlList);
 arlList.clear();
 arlList.addAll(h);
}

和 removeDuplicateWithOrder 方法:

    /** List order maintained **/
public static void removeDuplicateWithOrder(ArrayList arlList)
{
   Set set = new HashSet();
   List newList = new ArrayList();
   for (Iterator iter = arlList.iterator(); iter.hasNext();) {
      Object element = iter.next();
      if (set.add(element))
         newList.add(element);
   }
   arlList.clear();
   arlList.addAll(newList);
}

希望这些能以某种方式帮助你。

于 2012-05-20T16:20:03.297 回答
1

您在for条件下执行 vA.size(),然后尝试从循环内的 vA 中删除元素。这导致了异常。

将 vA.size 存储在单独的变量中

int size = vA.size();
for (int k = 0 ; k <= size ; k++)

然后,在循环内部,无论你在哪里

vA.removeElementAt(duplicate);

相反,将其存储为单独的新列表。

toBeRemoved.add(b);//b is the element to be removed later

并在循环后从 vA 中删除所有 toBeRemoved。

vA.removeAll(toBeRemoved );

编辑:

您的新代码将如下所示 -

int vASize = vA.size();
List vAToBeRemoved = new ArrayList();
for (int k = 0 ; k < vASize; k++)
            {                       
                Object a = vA.elementAt(0);
                Object b = vA.elementAt(k);
                if(a == b )
                {
                int duplicate = vA.indexOf(b);
                vAToBeRemoved.add(b);//elements to be removed later.
                vA.removeElementAt(duplicate);
                vB.removeElementAt(duplicate);
                vC.removeElementAt(duplicate);                    
                }
             }
vA.removeAll(vAToBeRemoved);
于 2012-05-20T16:20:45.413 回答
0

for (int k = 0 ; k <= vA.size() ; k++) k 应该只从0to运行,va.size() - 1因为它是从零开始的,即第一个索引是0。将循环语句重写为:

for (int k = 0 ; k < vA.size() ; k++)

于 2012-05-20T16:18:00.460 回答
0

使用以下方法从向量中删除重复元素

公共静态向量removeDuplicateResults(向量结果向量){

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;

}

于 2016-04-07T07:16:58.040 回答