Java 数组列表删除索引

Java 数组列表删除索引,java,arraylist,Java,Arraylist,我已经在这方面工作了很长时间了。我有一个数组列表,其中许多字符串在一个索引中 (指数0)品牌为:日产颜色为:黑色ID为:KL1车门为:4 (索引1)品牌为:福特颜色为:红色ID为:LL0门为:4 我希望用户只输入ID,它应该删除索引中的所有数据。 不幸的是,迭代器在这里不起作用。你知道怎么做吗?OOP 使用基本的面向对象方法 创建一个类来表示每行数据,包含四个成员字段:品牌、颜色、id、门 解析每行文本以实例化该类的对象。收集列表中的对象 循环列表并查询每个对象的id以匹配所需的id 为了加快添

我已经在这方面工作了很长时间了。我有一个数组列表,其中许多字符串在一个索引中

(指数0)品牌为:日产颜色为:黑色ID为:KL1车门为:4
(索引1)品牌为:福特颜色为:红色ID为:LL0门为:4

我希望用户只输入ID,它应该删除索引中的所有数据。 不幸的是,迭代器在这里不起作用。你知道怎么做吗?

OOP 使用基本的面向对象方法

创建一个类来表示每行数据,包含四个成员字段:品牌、颜色、id、门

解析每行文本以实例化该类的对象。收集
列表中的对象

循环列表并查询每个对象的id以匹配所需的id

为了加快添加/删除项目的速度,请使用
链接列表
而不是
数组列表
作为
列表

OOP的实现 使用基本的面向对象方法

创建一个类来表示每行数据,包含四个成员字段:品牌、颜色、id、门

解析每行文本以实例化该类的对象。收集
列表中的对象

循环列表并查询每个对象的id以匹配所需的id


为了加快添加/删除项目的速度,请使用
LinkedList
而不是
ArrayList
,因为实现
List

将数据存储在字符串中会让我想起80年代的美好时光。遵循Basil Borque的建议,然后,为了避免concurrentmodificationexception,从数组的末尾开始。这样,您就可以从列表中删除数据并继续使用上一个,而不是下一个(这会导致异常)

将数据存储在字符串中让我想起了80年代的美好时光。遵循Basil Borque的建议,然后,为了避免concurrentmodificationexception,从数组的末尾开始。通过这种方式,您可以从列表中删除并继续使用上一个,而不是下一个(这将导致异常)

您应该创建一个类,该类将包含与汽车相关的数据。以下面的代码为例。我使用了
java8
特性,可以在列表中进行内部迭代

public class Main {
public static void main(String[] args){
    List<Car> list = new ArrayList<>(Arrays.asList(new Car("Nissan", "Black", "KL1", "4"),
            new Car("Ford", "Red", "LL0", "4")));

    String id = "KL1";
    list.removeIf(i -> i.getID().equals(id));
    list.forEach(System.out::println); // show the list after operation
}

static class Car {
    public final String Brand;
    public final String Colour;
    public final String ID;
    public final String Door;

    public Car(String brand, String colour, String ID, String door) {
        Brand = brand;
        Colour = colour;
        this.ID = ID;
        Door = door;
    }

    public String getBrand() {
        return Brand;
    }

    public String getColour() {
        return Colour;
    }

    public String getID() {
        return ID;
    }

    public String getDoor() {
        return Door;
    }
}

}
公共类主{
公共静态void main(字符串[]args){
列表列表=新的ArrayList(Arrays.asList)(新车(“日产”、“黑色”、“KL1”、“4”),
新车(“福特”、“红色”、“LL0”、“4”);
字符串id=“KL1”;
removeIf(i->i.getID().equals(id));
list.forEach(System.out::println);//操作后显示列表
}
静态级轿车{
公共最终字符串品牌;
公共最终字符串颜色;
公共最终字符串ID;
公共门;
公共汽车(字符串品牌、字符串颜色、字符串ID、字符串门){
品牌=品牌;
颜色=颜色;
this.ID=ID;
门=门;
}
公共字符串getBrand(){
回归品牌;
}
公共字符串getColor(){
返色;
}
公共字符串getID(){
返回ID;
}
公共字符串getDoor(){
回程门;
}
}
}
更新

你也可以这样做

    public static void main(String[] args){
    List<Car> list = new ArrayList<>(Arrays.asList(new Car("Nissan", "Black", "KL1", "4"),
            new Car("Ford", "Red", "LL0", "4")));

    String id = "KL1";
    // Following code will find and remove the match from the list.
    // this for loop do exactly what it is doing "list.removeIf(i -> i.getID().equals(id));"
    for (int i = 0; i < list.size(); i++) {
        if (list.get(i).getID().equals(id)) {
            list.remove(i);
            break;
        }
    }
}
publicstaticvoidmain(字符串[]args){
列表列表=新的ArrayList(Arrays.asList)(新车(“日产”、“黑色”、“KL1”、“4”),
新车(“福特”、“红色”、“LL0”、“4”);
字符串id=“KL1”;
//以下代码将从列表中查找并删除匹配项。
//这个for循环完全执行它正在执行的操作“list.removeIf(i->i.getID().equals(id));”
对于(int i=0;i
您应该创建一个类,该类将包含与汽车相关的数据。以下面的代码为例。我使用了
java8
特性,可以在列表中进行内部迭代

public class Main {
public static void main(String[] args){
    List<Car> list = new ArrayList<>(Arrays.asList(new Car("Nissan", "Black", "KL1", "4"),
            new Car("Ford", "Red", "LL0", "4")));

    String id = "KL1";
    list.removeIf(i -> i.getID().equals(id));
    list.forEach(System.out::println); // show the list after operation
}

static class Car {
    public final String Brand;
    public final String Colour;
    public final String ID;
    public final String Door;

    public Car(String brand, String colour, String ID, String door) {
        Brand = brand;
        Colour = colour;
        this.ID = ID;
        Door = door;
    }

    public String getBrand() {
        return Brand;
    }

    public String getColour() {
        return Colour;
    }

    public String getID() {
        return ID;
    }

    public String getDoor() {
        return Door;
    }
}

}
公共类主{
公共静态void main(字符串[]args){
列表列表=新的ArrayList(Arrays.asList)(新车(“日产”、“黑色”、“KL1”、“4”),
新车(“福特”、“红色”、“LL0”、“4”);
字符串id=“KL1”;
removeIf(i->i.getID().equals(id));
list.forEach(System.out::println);//操作后显示列表
}
静态级轿车{
公共最终字符串品牌;
公共最终字符串颜色;
公共最终字符串ID;
公共门;
公共汽车(字符串品牌、字符串颜色、字符串ID、字符串门){
品牌=品牌;
颜色=颜色;
this.ID=ID;
门=门;
}
公共字符串getBrand(){
回归品牌;
}
公共字符串getColor(){
返色;
}
公共字符串getID(){
返回ID;
}
公共字符串getDoor(){
回程门;
}
}
}
更新

你也可以这样做

    public static void main(String[] args){
    List<Car> list = new ArrayList<>(Arrays.asList(new Car("Nissan", "Black", "KL1", "4"),
            new Car("Ford", "Red", "LL0", "4")));

    String id = "KL1";
    // Following code will find and remove the match from the list.
    // this for loop do exactly what it is doing "list.removeIf(i -> i.getID().equals(id));"
    for (int i = 0; i < list.size(); i++) {
        if (list.get(i).getID().equals(id)) {
            list.remove(i);
            break;
        }
    }
}
publicstaticvoidmain(字符串[]args){
列表列表=新的ArrayList(Arrays.asList)(新车(“日产”、“黑色”、“KL1”、“4”),
新车(“福特”、“红色”、“LL0”、“4”);
字符串id=“KL1”;
//以下代码将从列表中查找并删除匹配项。
//这个for循环完全执行它正在执行的操作“list.removeIf(i->i.getID().equals(id));”
对于(int i=0;i
如果选择使用迭代器,则支持数据结构无关紧要,因为O(n)(摊销)之外的任何东西都不能保证删除(至少)。如果选择使用迭代器,则支持数据结构无关紧要,因为O(n)(摊销)之外的任何东西都不能保证删除(至少).最重要的:为什么这是
ArrayList
而不是
ArrayList
?该数据应该是一个具有属性
{String brand、String color、String id、int doorCount}