使用临时对象从数组创建ArrayList

时间:2016-05-02 14:14:37

标签: java arraylist

我知道通过在类中添加构造函数有标准方法。但对于具有对象超类(具有无参数构造函数)的类,我倾向于发现使用更简单的临时对象。这种行为是否有任何不利因素。

    import java.util.ArrayList;
    public class Main { 

      public static void main(String[] args){

        // data available in two separated arrays  
        String[] dName = {"Sam","Ben","Joye","Sarah","Tim","Lucy","Jack"} ;
        int[] dAge= {10,52,53,15,12,60,21};

        // Array list to put the data in 
        ArrayList<Person> personList =new ArrayList<Person>(7);

        for (int i=0;i<dName.length;i++){
            Person tempPerson = new Person();
            tempPerson.name= dName[i];
            tempPerson.age= dAge[i];
            personList.add(new Person());
            personList.set(i,tempPerson);
            tempPerson=null;    //removes the reference
        }

        for (int j=0 ; j<personList.size();j++){
            System.out.println(personList.get(j).name+" age is "+personList.get(j).age );
        }

      }  
    }

class Person{
    String name;
    int age;
}

输出

Sam age is 10
Ben age is 52
Joye age is 53
Sarah age is 15
Tim age is 12
Lucy age is 60
Jack age is 21

3 个答案:

答案 0 :(得分:4)

你应该避免不做任何事情的陈述 - 做优化

   for (int i=0;i<dName.length;i++){
        Person tempPerson = new Person();
        tempPerson.name= dName[i];
        tempPerson.age= dAge[i];
        personList.add(tempPerson);
    }
  • 无需先将此人添加到以后替换
  • 无需将引用置空 - 列表将保留对temp对象的引用。
  • 您可以使用setter(setName()代替.name =)来代替直接设置值。
  • 如果你使用setter,你可以实现一个Builder模式:
像这样:

 public Person setName(String aName) {
   name = aName;
   return this;
 }

导致类似

的内容
 personList.add(new Person().setName(dName[i]).setAge(dAge[i]));

然后再次 - 两个值构造函数可能是最简单的 - 并且超类没有构造函数也没关系:

public Person(String aName, int aAge) {
   name = aName;
   age = aAge;
}
//You can have more than one constructor
public Person() {
}

然后

personList.add(new Person(dName[i], sAge[i]));

答案 1 :(得分:3)

您应该为Person使用构造函数。然后你的for循环中只有一个调用:

personList.add(new Person(dName[i], dAge[i])

此外,在您的实施中,您正在进行两次必要的工作,因为您拨打了personList.add(new Person()),然后拨打了personList.set(i, temPerson)。如果你不想在你的Person类中使用构造函数,那么调用personList.add(tempPerson)就足够了。

答案 2 :(得分:0)

不是,

你可以使用java8流,但为什么要让你的生活更难,它不会添加任何新东西