Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/386.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Java中删除和替换数组列表中的项?_Java_Arraylist - Fatal编程技术网

如何在Java中删除和替换数组列表中的项?

如何在Java中删除和替换数组列表中的项?,java,arraylist,Java,Arraylist,我有以下java代码 import java.util.ArrayList; import java.util.Objects; public class Cars { private static ArrayList<String> replaceDuplicates(ArrayList<String> aList) { for (int i = 0; i < aList.size(); i++) { for

我有以下java代码

import java.util.ArrayList;
import java.util.Objects;

public class Cars {

    private static ArrayList<String> replaceDuplicates(ArrayList<String> aList) {

        for (int i = 0; i < aList.size(); i++) {
            for (int j = i + 1; j < aList.size(); j++) {
                if (Objects.equals(aList.get(i), aList.get(j))) {
                    aList.remove(i);
                    aList.add(i, "");
                    aList.remove(j);
                    aList.add(j, "");
                }
            }
        }

        return aList;
    }

    public static void main(String[] args) {

        ArrayList<String> cars = new ArrayList<>();

        cars.add("Ford");
        cars.add("Ford");
        cars.add("Hyundai");
        cars.add("Toyota");
        cars.add("Toyota");
        cars.add("Toyota");
        cars.add("Ford");
        cars.add("Honda");
        cars.add("GMC");

        System.out.println(cars);

        cars = replaceDuplicates(cars);

        System.out.println(cars);

    }

}
import java.util.ArrayList;
导入java.util.Objects;
公车{
专用静态ArrayList替换重复项(ArrayList){
对于(int i=0;i
此代码的输出为-
[,现代,丰田,福特,本田,GMC]

我想用
替换数组列表中多次出现的汽车名称。出于某种原因,在我的代码中,如果一辆车的名字在数组列表中出现了三次,那么第三次出现的名字就不会被替换为

我想要的输出应该是这样的-
[,现代,,,本田,GMC]

我做错了什么


提前谢谢你

首先:您可以通过使用而不是插入和删除元素来简化此代码

aList.remove(i);
aList.add(i, "");
只会变成

aList.set(i, "");
如果两个条目重复,则删除它们。这会导致总是删除偶数个条目的行为。例如:

a  b  a  a  c  a  d  a
b  a  c  a  d  a         #first pair removed
b  c  d  a               #second pair removed
如果元素数为奇数,则列表中始终保留一个元素

显然,您需要一些方法来记住要删除哪些元素。一种简单的方法是使用一个标志来记住是否遇到了元素的副本:

for (int i = 0; i < aList.size(); i++) {
    //the flag
    boolean duplicate = false;        

    for (int j = i + 1; j < aList.size(); j++) {
        if (Objects.equals(aList.get(i), aList.get(j))) {
            aList.set(j, "");   //remove all duplicates with an index higher than i
            duplicate = true;   //remember that element at index i is a duplicate
        }
    }

    //remove last duplicate element
    if(duplicate)
        aList.set(i, "");
}
for(int i=0;i
首先:您可以通过使用而不是插入和删除元素来简化此代码

aList.remove(i);
aList.add(i, "");
只会变成

aList.set(i, "");
如果两个条目重复,则删除它们。这会导致总是删除偶数个条目的行为。例如:

a  b  a  a  c  a  d  a
b  a  c  a  d  a         #first pair removed
b  c  d  a               #second pair removed
如果元素数为奇数,则列表中始终保留一个元素

显然,您需要一些方法来记住要删除哪些元素。一种简单的方法是使用一个标志来记住是否遇到了元素的副本:

for (int i = 0; i < aList.size(); i++) {
    //the flag
    boolean duplicate = false;        

    for (int j = i + 1; j < aList.size(); j++) {
        if (Objects.equals(aList.get(i), aList.get(j))) {
            aList.set(j, "");   //remove all duplicates with an index higher than i
            duplicate = true;   //remember that element at index i is a duplicate
        }
    }

    //remove last duplicate element
    if(duplicate)
        aList.set(i, "");
}
for(int i=0;i
如果您仍然想使用您的方法,您可以在修改列表之前创建对项目的引用:

for (int i = 0; i < aList.size(); i++) {
    String a = aList.get(i);
    for (int j = i + 1; j < aList.size(); j++) {
        String b = aList.get(j);
        if (Objects.equals(a, b)) {
            aList.remove(i);
            aList.add(i, "");
            aList.remove(j);
            aList.add(j, "");
        }
    }
}
for(int i=0;i
如果您仍然想使用您的方法,您可以在修改列表之前创建对项目的引用:

for (int i = 0; i < aList.size(); i++) {
    String a = aList.get(i);
    for (int j = i + 1; j < aList.size(); j++) {
        String b = aList.get(j);
        if (Objects.equals(a, b)) {
            aList.remove(i);
            aList.add(i, "");
            aList.remove(j);
            aList.add(j, "");
        }
    }
}
for(int i=0;i
无论何时发现成对匹配,都会清除两个匹配的名称。那么,您将哪些名称与后续名称进行比较?您可以为此目的使用一个集合实例。您希望的输出是什么?我猜类似于
[,现代,,,本田,GMC]
,但从您的描述中不确定。每当您发现成对匹配时,您都会清除两个匹配的名称。那么,您将哪些名称与后续名称进行比较?您可以为此目的使用一个集合实例。您希望的输出是什么?我在猜测类似于
[,现代,,,本田,GMC]
,但从你的描述中不确定。