Java 对象as字段中的存储列表/链接列表
在过去的几天里,我一直在想如何使linkedList作为类字段工作。在我的项目中,我正在创建一个对象,经过几次修改后,我想用linkedList设置字段。我在下面建立了这个问题的简单模型。首先,我们创建新的“汽车”,然后设置ArrayList(linkedlIst也有同样的问题),然后添加到汽车列表中。在这期间,一切都可以。对象获取此列表及其内部视图。但当我将更多的对象添加到列表中或只是生成另一个LinkedList(另一个对象的Classfield)时,所有对象都会得到与上一个类似的新字段。举例如下:Java 对象as字段中的存储列表/链接列表,java,Java,在过去的几天里,我一直在想如何使linkedList作为类字段工作。在我的项目中,我正在创建一个对象,经过几次修改后,我想用linkedList设置字段。我在下面建立了这个问题的简单模型。首先,我们创建新的“汽车”,然后设置ArrayList(linkedlIst也有同样的问题),然后添加到汽车列表中。在这期间,一切都可以。对象获取此列表及其内部视图。但当我将更多的对象添加到列表中或只是生成另一个LinkedList(另一个对象的Classfield)时,所有对象都会得到与上一个类似的新字段。举
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
实例都指向color[[Ford3]]
的原因是它们都指向ArrayListcolors
的单个实例。由于要在每个Car
中存储对ArrayList
的引用,ArrayList实例必须与LinkedList实例一样唯一。
要获得所需的行为,可以替换行colors.clear()代码>带有颜色=新的ArrayList()代码>
完整清理示例:
主要内容:
包so.q48042638;
导入java.util.ArrayList;
导入java.util.LinkedList;
导入java.util.List;
公共班机{
公共静态void main(字符串[]args){
列表颜色=新的ArrayList();
List cars=new ArrayList();
Car car1=新车(“福特1”);
添加(生成颜色(car1));
car1.设置颜色(颜色);
添加(car1);
汽车2=新车(“福特2”);
颜色=新的ArrayList();
添加(生成颜色(car2));
car2.设置颜色(颜色);
添加(car2);
Car car3=新车(“福特3”);
颜色=新的ArrayList();
添加(生成颜色(car3));
car3.设置颜色(颜色);
添加(car3);
用于(c车:汽车){
系统输出打印ln(c);
}
}
专用静态列表生成颜色(汽车){
List optcje=newlinkedlist();
add(car.getName());
返回opcje;
}
}
汽车:
包so.q48042638;
导入java.util.List;
公车{
私有字符串名称;
私有列表颜色;
公共汽车(字符串名称){
this.name=名称;
}
公共列表getColors(){
返回颜色;
}
公共无效设置颜色(列表颜色){
这个。颜色=颜色;
}
公共字符串getName(){
返回名称;
}
@凌驾
公共字符串toString(){
返回“名称:”+名称+“颜色:”+颜色;
}
}
您正在使用,应尽可能避免使用。发布您的生成颜色方法。我认为应该有一个更好的方法来实现这一点,而不是用一个列表列表。这只是一个简单的例子(没有意义)来说明我的问题。在我的项目中,我正在解析具有树结构节点的html页面。我并没有找到更好的方法来存储这个结构,并能够将它恢复为树结构。我有10个主节点,其中一些有带节点的节点。我将其存储为:LinkedList-其中我有每个节点的LinkedList。这个列表的最后一个元素是字符串,它帮助我找到这个节点的“父节点”(其他LinkedList的第一个元素)。LinkedList还帮助我把所有东西都放在正确的位置,bcs这个HTML的所有节点都是div,我想我不能在这里添加“代码”,但也许你能看到任何东西。在这个方法中,简单地添加对象名就可以看到这个LinkedList分配的作用。看起来对象中的每个linkedlist无论何时都会被替换为最后一个linkedlist Assignment。public static LinkedList generateColors(Car-Car){LinkedList optcje=new LinkedList();System.out.println(“调用”+Car.getName());optcje.add(Car.getName());System.out.println(“返回:+optcje.toString());Return optcje;}如果我的答案解决了您的问题,请单击大复选框接受它作为答案。新年快乐!
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]]
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;
}
}