Java 使用LinkedList集合向对象添加实例变量

Java 使用LinkedList集合向对象添加实例变量,java,collections,Java,Collections,我有一个汽车级别: public class Car { public String name = null; // Name of the Car Model public String color = null; // Color of the car Car(){ /** DO WHATEVER***/ } } 然后在main()类中执行以下操作: LinkedList<Car> myCars = new L

我有一个汽车级别:

public class Car {

    public String name = null; // Name of the Car Model
    public String color = null; // Color of the car

    Car(){
          /** DO WHATEVER***/
    }
}

然后在main()类中执行以下操作:

    LinkedList<Car> myCars = new  LinkedList<Car>();

    myCars.add(new Car());
    myCars.add(new Car());
    myCars.add(new Car());

    myCars.get(0).name = "Geep";
    myCars.get(0).color = "Black";

    myCars.get(1).name = "Camry";
    myCars.get(1).color = "Red";

    myCars.get(2).name = "Honda";
    myCars.get(2).color = "Green";
那么这是上面的正确方法吗?我的意思是,在Java集合中,如何为每个对象的实例变量赋值?我明白,如果我们有很多车
对象,然后我们将使用for循环

请解释一下


谢谢。

将构造函数更改为:
/**做任何事***/

例如:

Car(String name, String color){
    this.name = name;
    this.color = color;
}
然后在列表中插入:

myCars.add(new Car("Geep", "Black"));
myCars.add(new Car("Camry", "red"));
...
如果您没有汽车的“详细信息”,您只需要实例化一个包含50辆汽车的列表,然后再“添加详细信息”,那么会出现另一个问题:详细信息来自哪里?如果您事先不知道它必须来自一个永恒的来源(用户输入、文件等),那么在列表上循环运行并添加详细信息是有意义的:

for (Car car : myCars) {
    String name = ... // get the details of the car from an external source
    String type = ... // get the details of the car from an external source
    car.setName(name); // of course you'll have to implement setName() and setType()
    car.setType(type); // which is a better practice than exposing the class members via public access
}

将构造函数更改为:
/**做任何事***/

例如:

Car(String name, String color){
    this.name = name;
    this.color = color;
}
然后在列表中插入:

myCars.add(new Car("Geep", "Black"));
myCars.add(new Car("Camry", "red"));
...
如果您没有汽车的“详细信息”,您只需要实例化一个包含50辆汽车的列表,然后再“添加详细信息”,那么会出现另一个问题:详细信息来自哪里?如果您事先不知道它必须来自一个永恒的来源(用户输入、文件等),那么在列表上循环运行并添加详细信息是有意义的:

for (Car car : myCars) {
    String name = ... // get the details of the car from an external source
    String type = ... // get the details of the car from an external source
    car.setName(name); // of course you'll have to implement setName() and setType()
    car.setType(type); // which is a better practice than exposing the class members via public access
}

关于这是否是正确的方法:我更喜欢重写构造函数,以便我的初始化代码和setter代码位于同一位置

基本上,我将为Car提供构造器:

public class Car {

public String name = null; // Name of the Car Model
public String color = null; // Color of the car

public Car(String name, String color){
  super();
  this.name = name;
  this.color = color;
  }
}
然后我会把它放在我的收藏中:

LinkedList<Car> myCars = new  LinkedList<Car>();

myCars.add(new Car("Jeep", "Black"));
myCars.add(new Car("Ferrari", "Red"));
LinkedList myCars=新建LinkedList();
添加(新车(“吉普”、“黑色”);
添加(新车(“法拉利”、“红色”);

关于这是否是正确的方法:我更喜欢重写构造函数,以便我的初始化代码和setter代码位于同一位置

基本上,我将为Car提供构造器:

public class Car {

public String name = null; // Name of the Car Model
public String color = null; // Color of the car

public Car(String name, String color){
  super();
  this.name = name;
  this.color = color;
  }
}
然后我会把它放在我的收藏中:

LinkedList<Car> myCars = new  LinkedList<Car>();

myCars.add(new Car("Jeep", "Black"));
myCars.add(new Car("Ferrari", "Red"));
LinkedList myCars=新建LinkedList();
添加(新车(“吉普”、“黑色”);
添加(新车(“法拉利”、“红色”);

首先,不建议公开实例变量(public)。将public更改为private并创建getter。此外,您还可以创建一个构造函数,该构造函数在参数中使用名称和颜色:

public class Car {

    private String name = null;
    private String color = null;

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

    public String getName() {
        return name;    
    }

    public String getColor() {
        return color;
    }
}
然后你可以做:

LinkedList<Car> myCars = new  LinkedList<Car>();

myCars.add(new Car("Jeep", "Black"));
myCars.add(new Car("Camry", "Red"));
myCars.add(new Car("Honda", "Green"));
LinkedList myCars=新建LinkedList();
添加(新车(“吉普”、“黑色”);
添加(新车(“凯美瑞”、“红色”);
添加(新车(“本田”、“绿色”));

有很多方法可以做到这一点,但我肯定会在将汽车信息添加到列表之前设置汽车信息。

首先,不建议公开实例变量(public)。将public更改为private并创建getter。此外,您还可以创建一个构造函数,该构造函数在参数中使用名称和颜色:

public class Car {

    private String name = null;
    private String color = null;

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

    public String getName() {
        return name;    
    }

    public String getColor() {
        return color;
    }
}
然后你可以做:

LinkedList<Car> myCars = new  LinkedList<Car>();

myCars.add(new Car("Jeep", "Black"));
myCars.add(new Car("Camry", "Red"));
myCars.add(new Car("Honda", "Green"));
LinkedList myCars=新建LinkedList();
添加(新车(“吉普”、“黑色”);
添加(新车(“凯美瑞”、“红色”);
添加(新车(“本田”、“绿色”));


有很多方法可以做到这一点,但我肯定会在将汽车信息添加到列表之前设置汽车信息。

在这种情况下,正确的方法是在的构造函数中初始化这些值Car@Navchetan:请你重新措辞/详细解释一下你的意思:“我的意思是,在Java集合中,如何为每个对象的实例变量赋值。我的意思是,使用get()方法?我明白,如果我们有很多car对象,那么我们将使用for循环。“是的,我明白。但是我们可以说,在对象创建时,我们没有实例变量值,我们会在后期获得它们。每个对象大约有50多个实例变量。那么这是正确和最佳的方法:myCars.get(0)。name=“Geep"; 在这种情况下,正确的方法是在Car@Navchetan:您能否重新表述/详细说明您的意思:“我是说如何在Java集合中为每个对象的实例变量赋值方法?我明白,如果我们有很多汽车物体,那么我们将使用for循环。但是我们可以说,在对象创建时,我们没有实例变量值,我们会在后期获得它们。每个对象大约有50多个实例变量。那么这是正确且最佳的方法吗:myCars.get(0).name=“Geep”;myCars.get(0).color=“Black”是的,我明白。但是我们可以说,在对象创建时,我们没有实例变量值,我们会在后期获得它们。每个对象大约有50多个实例变量。那么这是正确且最佳的方法吗:myCars.get(0).name=“Geep”;myCars.get(0).color=“Black”@Navchetan-seeaddition@alfasin +1. 如果您有太多的实例变量,我还建议使用构建器模式,这样可以使代码可重用、可读并且更易于维护IMHO。下面是一个示例,其中包含一些详细信息。@dubes生成器模式不适合此场景,因为在实例化时对象的详细信息是未知的。这里的模式是创建“空白”模板汽车对象,并在稍后“填充”详细信息。在生成器模式中,收集所有参数,然后才实例化对象。@alfasin+1。谢谢,是的,我明白。但是我们可以说,在对象创建时,我们没有实例变量值,我们会在后期获得它们。每个对象大约有50多个实例变量。那么这是正确且最佳的方法吗:myCars.get(0).name=“Geep”;myCars.get(0).color=“Black”@Navchetan-seeaddition@alfasin +1. 如果您有太多的实例变量,使代码可重用、可读性和可扩展性,我还建议使用构建器模式