Java 对象as字段中的存储列表/链接列表

Java 对象as字段中的存储列表/链接列表,java,Java,在过去的几天里,我一直在想如何使linkedList作为类字段工作。在我的项目中,我正在创建一个对象,经过几次修改后,我想用linkedList设置字段。我在下面建立了这个问题的简单模型。首先,我们创建新的“汽车”,然后设置ArrayList(linkedlIst也有同样的问题),然后添加到汽车列表中。在这期间,一切都可以。对象获取此列表及其内部视图。但当我将更多的对象添加到列表中或只是生成另一个LinkedList(另一个对象的Classfield)时,所有对象都会得到与上一个类似的新字段。举

在过去的几天里,我一直在想如何使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]]
的原因是它们都指向ArrayList
colors
的单个实例。由于要在每个
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;
    }
}