gpt4 book ai didi

java - 将已排序 ArrayList 中的重复项分组到另一个 ArrayList 中

转载 作者:行者123 更新时间:2023-12-02 05:36:22 25 4
gpt4 key购买 nike

(全面披露:这是为了一些我似乎无法弄清楚的作业。)

任务:识别列表中的重复项并将它们添加到另一个要打印的 ArrayList 中。

规范:我不允许使用除 ArrayList 之外的任何集合,因此我不能使用 Set 之类的东西。似乎 StackOverflow 上的每个答案都建议使用 Set,这就是我决定问这个问题的原因。

到目前为止我尝试过的事情:

public static void deleteDuplicates(List<String> list)
{
int pointer = 1;
List<String> duplicates = new ArrayList<String>();
for (int i = 0; i < list.size() - 1; i++) {
if (list.get(i).equals(list.get(pointer))) {
duplicates.add(list.get(i));

if (pointer == 1) {
duplicates.add(list.get(pointer));
} else if ((pointer + 1) == list.size() - 1) {
duplicates.add(list.get(pointer));
}

pointer++;
} else {
display(duplicates);
duplicates = new ArrayList<String>();
pointer++;
}
}
}

测试数据:

List<String> duplicated = new ArrayList<String>();
duplicated.add("3");
duplicated.add("3");
duplicated.add("30");
duplicated.add("46");
duplicated.add("46");

问题所在:当列表大小为奇数时,重复项会正确报告。当列表大小为偶数时,仅报告前两个重复项。

最佳答案

您的方法的问题是循环在对最后一个元素进行 if-else 检查之前退出。在最后一次迭代中,if 条件满足,并且它会添加到重复项,但不会再次进入 for 循环以转到 else 部分。所以它不会被显示。尝试一下

public static void deleteDuplicates(List<String> list)
{
int pointer = 1;
List<String> duplicates = new ArrayList<String>();
for (int i = 0; i < list.size() - 1; i++) {
if (list.get(i).equals(list.get(pointer))) {
duplicates.add(list.get(i));

if (pointer == 1) {
duplicates.add(list.get(pointer));
} else if ((pointer + 1) == list.size() - 1) {
duplicates.add(list.get(pointer));
}

pointer++;
} else if(duplicates.size() > 0) {
display(duplicates);
duplicates.clear();
pointer++;
}
}
if(duplicates.size() > 0){
display(duplicates);
}
}

关于java - 将已排序 ArrayList 中的重复项分组到另一个 ArrayList 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24934697/

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