gpt4 book ai didi

java - 对象中存储列表/链接列表作为字段

转载 作者:行者123 更新时间:2023-12-02 11:48:28 25 4
gpt4 key购买 nike

在过去的几天里,我一直在尝试弄清楚如何使 linkedList 作为类字段起作用。在我的项目中,我正在创建对象,经过几次迭代后,我想使用 linkedList 设置字段。我在下面制作了这个问题的简单模型。首先,我们创建新的“汽车”,然后设置 ArrayList(与 linkedlList 存在同样的问题),然后将其添加到汽车列表中。在此期间一切都很好。对象获取此列表及其内部 View 。但是,当我将更多对象添加到列表中或只是生成另一个 LinkedList(另一个对象的类字段)时,所有对象都将获得与最后一个类似的新字段。示例如下:

public static void main(String[] args) {
ArrayList<LinkedList> colors = new ArrayList();
LinkedList<LinkedList> opcje = new LinkedList();
List<Car> cars = new ArrayList<>();

Car car1 = new Car("Ford1");
colors.add(generateColors(car1));
car1.setColors(colors);
cars.add(car1);
colors.clear();
Car car2 = new Car("Ford2");
colors.add(generateColors(car2));
car2.setColors(colors);
cars.add(car2);
colors.clear();
Car car3 = new Car("Ford3");
colors.add(generateColors(car3));
car3.setColors(colors);
cars.add(car3);
System.out.println(car1.getColors().toString());
System.out.println(car1.getColors());
for(Car c : cars) {
System.out.println(c.toString());
}

System.out.println(car1.getColors().toString());
}

和Car.class

public class Car {
private String name;
private String engine;
private ArrayList<LinkedList> colors;

public Car(String name) {
this.name=name;
}

public ArrayList<LinkedList> getColors() {
return colors;
}

public void setColors(ArrayList<LinkedList> colors) {
System.out.println("Setting up colors for "+colors.toString());
this.colors = colors;
}

public String getName() {
return name;
}

@Override
public String toString() {
return "name : "+name+" colors: "+colors.toString();
}
}

结果将是:

name : Ford1 colors: [[Ford3]]
name : Ford2 colors: [[Ford3]]
name : Ford3 colors: [[Ford3]]

我做错了什么?

最佳答案

原因都是Car实例指向颜色 [[Ford3]]是它们都指向 ArrayList colors 的单个实例。由于您正在存储对 ArrayList<LinkedList> 的引用在每个 Car ArrayList 实例必须是唯一的,LinkedList 实例也是如此。为了获得您想要的行为,您可以替换行 colors.clear();colors = new ArrayList<>();

完全清理示例:

主要:

package so.q48042638;

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;

public class Main {
public static void main(String[] args) {
List<List<String>> colors = new ArrayList<>();
List<Car> cars = new ArrayList<>();

Car car1 = new Car("Ford1");
colors.add(generateColors(car1));
car1.setColors(colors);
cars.add(car1);

Car car2 = new Car("Ford2");
colors = new ArrayList<>();
colors.add(generateColors(car2));
car2.setColors(colors);
cars.add(car2);

Car car3 = new Car("Ford3");
colors = new ArrayList<>();
colors.add(generateColors(car3));
car3.setColors(colors);
cars.add(car3);

for (Car c : cars) {
System.out.println(c);
}
}

private static List<String> generateColors(Car car) {
List<String> opcje = new LinkedList<>();
opcje.add(car.getName());
return opcje;
}
}

汽车:

package so.q48042638;

import java.util.List;

public class Car {
private String name;
private List<List<String>> colors;

public Car(String name) {
this.name = name;
}

public List<List<String>> getColors() {
return colors;
}

public void setColors(List<List<String>> colors) {
this.colors = colors;
}

public String getName() {
return name;
}

@Override
public String toString() {
return "name : " + name + " colors: " + colors;
}
}

关于java - 对象中存储列表/链接列表作为字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48042638/

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