gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-11-01 01:02:20 25 4
gpt4 key购买 nike

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

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;
}

虽然逻辑似乎是正确的,但我的编译器在以下位置给我一个数组索引越界错误

tempa[counter] = j;

我不明白 counter 怎么会增长到超过 items.length 的值,逻辑错误在哪里?

最佳答案

你给自己添麻烦了。让 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));

关于java - 如何使用 Java 中的辅助数组从列表中删除重复项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12632167/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com