如何使用Java中的辅助数组从列表中删除重复项?

use*_*633 4 java arrays counter duplicates

我试图通过创建一个临时数组来删除列表中的重复项,该数组存储重复项所在的索引,然后将原始数组复制到另一个临时数组中,同时将索引与我存储在第一个临时数组中的索引进行比较.

public void removeDuplicates()
{
    double tempa [] = new double [items.length];
    int counter = 0;
    for ( int i = 0; i< numItems ; i++)
    {
        for(int j = i + 1; j < numItems; j++)
        {
            if(items[i] ==items[j])
            {
                tempa[counter] = j;
                counter++;

            }
        }
    }

    double tempb [] = new double [ items.length];
    int counter2 = 0;
    int j =0;
    for(int i = 0; i < numItems; i++)
    {
        if(i != tempa[j])
        {
            tempb[counter2] = items[i];
            counter2++;

        }
        else
        {
            j++;

        }
    }

    items = tempb;
    numItems = counter2;
}
Run Code Online (Sandbox Code Playgroud)

虽然逻辑看似正确,但我的编译器在给我一个arrayindexoutofbounds错误

tempa[counter] = j;
Run Code Online (Sandbox Code Playgroud)

我不明白计数器如何增长到items.length的值以上,逻辑缺陷在哪里?

Ada*_*dam 13

你为自己制造的东西很难.让Java为您做繁重的工作.例如,LinkedHashSet为您提供唯一性并保留插入顺序.它比将每个值与每个其他值进行比较也更有效.

double [] input = {1,2,3,3,4,4};
Set<Double> tmp = new LinkedHashSet<Double>();
for (Double each : input) {
    tmp.add(each);
}
double [] output = new double[tmp.size()];
int i = 0;
for (Double each : tmp) {
    output[i++] = each;
}
System.out.println(Arrays.toString(output));
Run Code Online (Sandbox Code Playgroud)