【问题标题】:How would I best go about populating this array with original objects?我将如何最好地用原始对象填充这个数组?
【发布时间】:2014-06-12 23:09:56
【问题描述】:

我有一个数组:

ArrayList<Person> people = new ArrayList();

我想将人员添加到数组中,但我认为它不会起作用,因为所有对象都将具有相同的名称。

Person person = new Person();
person.firstName = firstNameTextField.getText();
person.lastName = lastNameTextField.getText();
//Etc
people.add(person);

我的问题是,我可以用相同变量名的对象填充数组吗?如果没有,我怎么还能使用People 对象?

【问题讨论】:

  • 一个对象与引用它的变量无关。
  • 先试一试,如果您确实有问题,请提出问题。如果你循环它,你会为person 分配一个新的Person 对象,但这并不意味着前一个对象消失了:你只是不再从person 引用它。
  • 那么我可以使用数组的索引来引用对象吗?
  • @Mattbettinson 是的,你可以的。
  • 实现Person.clone() 并使用它?

标签: java object arraylist


【解决方案1】:

是的,您所描述的内容不会有任何问题。

你会得到这样的结果:

Person person = new Person();
person.firstName = firstNameTextField.getText();
person.lastName = lastNameTextField.getText();
people.add(person);

person = new Person(); // <-- reinitializing person.
person.firstName = firstNameTextField.getText();
person.lastName = lastNameTextField.getText();
people.add(person);

此时 List 包含两个唯一的 Person 对象。遍历它们可能看起来像这样:

ArrayList<Person> people = new ArrayList();
// add a bunch of Person objects like we did above

for(int i = 0; i < people.size(); i++) {
    System.out.println("Found person: " + people.get(i).firstName);
}

您继续进行 people.add(person) 调用的事实并不一定是您一遍又一遍地将同一个人添加到您的列表中。在上面显示的情况下,添加了唯一的 Person 对象,并且可以独立访问,如 for 循环所示。

【讨论】:

  • people[i].firstName 应该是people.get(i).firstName
【解决方案2】:

对象与其变量名无关!是的,当然可以!

【讨论】:

    【解决方案3】:

    如果你很懒,你也可以在 People 中使用构造函数。

    class Person {
     public Person(String firstname, String lastname) { 
     this.firstname=firstname;      
     this.lastname=lastname; 
    }
    }
    

    然后……

    people.add(new People("tom", "lastnameoftom"));
    people.add(new People("Susi", "SusisLastname"));
    

    等等……

    但是要回答您的问题.. 每次您在 var 上使用 new 时,它都会重新初始化。编译器会翻译这个:

    People people = new People();
    people.setSetter(data);
    
    people = new People();
    people.setSetter(otherdata);
    

    到(示例)

    People a = new People();
    a.setSetter(data);
    
    People b = new People();
    b.setSetter(otherdata);
    

    【讨论】:

      猜你喜欢
      • 2013-10-31
      • 2021-12-02
      • 2019-05-02
      • 1970-01-01
      • 1970-01-01
      • 2020-07-24
      • 1970-01-01
      • 2013-03-10
      • 1970-01-01
      相关资源
      最近更新 更多