通过for循环添加具有不同名称的对象

执行以下操作的最佳方法是:

List list = new LinkedList(); for(int i=0; i<30;i++) { MyObject o1 = new MyObject(); list.add(o1); } 

但事情是我不想创建具有相同名称的对象,我想用不同的名称创建它们,如o1,o2,o3,o4,o5,o6,o7,o8,o9,o10 ,我想将每个添加到列表中。 做这个的最好方式是什么 ?

您不需要为每个对象使用不同的名称。 由于o1对象是在for循环中声明的,因此o1变量的范围仅限于for循环,并且在每次迭代期间重新创建…除了每次它将引用在该迭代期间创建的新对象。 请注意,变量本身不存储在列表中,只存储在它所引用的对象中。

如果您不需要对新对象执行任何其他操作,只需将其添加到列表中,您可以执行以下操作:

 for(int i=0; i<30;i++) { list.add(new MyObject()); } 

你为什么要给他们不同的名字? 你正在for循环中创建对象,因此它不存在于外部,因此我认为没有理由给它们不同的名称。

回答你的问题:我看到的唯一方法,但我可能错了,就是创建一个MyObjects数组并执行:

 List list = new LinkedList(); MyObject[] o = new MyObject[30]; for(int i = 0; i < 30; i++) { o[i] = new MyObject(); list.add(o[i]); } 

在循环的上下文中,您不必担心为您创建的每个新实例提供名称。 这足以说明了

 List list = new LinkedList(); for(int i=0; i<30;i++) { list.add(new MyObject()); } 

你可以做什么(虽然这也没有多大意义),是使用Map而不是List

 Map map = new HashMap(); for (int i = 0; i < 10; i++) { map.put("o" + i, new MyObject()); } 

您的对象没有名称。 变量 o1有一个名称,但它没有链接到对象,只是变量引用了对象。 列表中的对象不知道变量o1曾经引用过。

对于你正在做的事情,你根本不需要变量,正如斯蒂芬在他的回答中所说,你可以直接添加对象:

 for (int i=0; i<30;i++) { list.add(new MyObject()); } 

创建对象为其命名,添加构造函数。 然后将对象名称添加到arraylist。