在Java中将用户定义的对象添加到ArrayList
我想向在Java中将用户定义的对象添加到ArrayList,java,arraylist,Java,Arraylist,我想向ArrayList添加一个用户定义的类型,如下图所示 import java.util.ArrayList; class MyObj { int iX; } public class testForLoopjava { public static void main(String[] args) { MyObj ob1 = new MyObj(); ArrayList<MyObj> al = new ArrayList&
ArrayList
添加一个用户定义的类型,如下图所示
import java.util.ArrayList;
class MyObj
{
int iX;
}
public class testForLoopjava
{
public static void main(String[] args)
{
MyObj ob1 = new MyObj();
ArrayList<MyObj> al = new ArrayList<MyObj>();
int a,b;
for(int i =0;i<5;i++)
{
ob1.iX = i + 5;
al.add(ob1);
}
for(int j=0;j<5;j++)
System.out.println("iX: "+al.get(j).iX);
}
}
每次都将同一对象添加到列表中。您应该使用在循环中创建的新实例。
e、 g-
ArrayList<MyObj> al = new ArrayList<MyObj>();
int a,b;
for(int i =0;i<5;i++)
{
MyObj ob1 = new MyObj();
ob1.iX = i + 5;
al.add(ob1);
}
这种方法可以产生一种更安全的解决方案(如上所述),但需要注意的是,对象在实例化后可能会发生更改。这听起来像是一种限制性做法,但您会惊讶地发现许多对象都可以以这种方式实现。这是因为您总是将相同的实例(相同的对象)放在列表中 尝试:
publicstaticvoidmain(字符串[]args)
{
ArrayList al=新的ArrayList();
INTA,b;
对于(int i=0;i您多次将相同的对象添加到列表中。您只创建了一个MyObj
,并且只更改该对象所持有的int值。这是因为您只保留了对MyObj的一个引用,所有元素都引用它。请尝试按如下方式修改代码:
for(int i =0;i<5;i++)
{
MyObj ob1 = new MyObj();
ob1.iX = i + 5;
al.add(ob1);
}
for(int i=0;i您每次都在更改相同的对象,因此在循环中的最后一次,它将设置ob1.iX=4+5(=9)。
每次都应该创建一个新实例,因此将其放入循环中:
for(int i =0;i<5;i++)
{
MyObj ob1 = new MyObj();
ob1.iX = i + 5;
al.add(ob1);
}
for(int i=0;i使用对象数组的多个版本:
package com.may.arrays;
import java.util.ArrayList;
public class AddObjectToArray {
public static void main(String args[]){
ArrayList<MyObject> l_list = new ArrayList<MyObject>();
MyObject l_myObj = new MyObject();
l_myObj.holder = new MyObject2[6];
for(int i=0;i<5;i++){
l_myObj.holder[i] = new MyObject2();
l_myObj.holder[i].value = i+5;
l_list.add(l_myObj);
}
for(int j=0;j<5;j++){
System.out.println("value is: "+l_list.get(j).holder[j].value);
}
}
}
class MyObject{
MyObject2[] holder;
}
class MyObject2{
int value;
}
package com.may.arrays;
导入java.util.ArrayList;
公共类AddObjectToArray{
公共静态void main(字符串参数[]){
ArrayList l_list=新的ArrayList();
MyObject l_myObj=新的MyObject();
l_myObj.holder=新的MyObject2[6];
对于(inti=0;i您正在向列表中添加相同的对象,因为这会给出相同的结果。
您每次都必须创建新实例。:)欢迎使用堆栈溢出!此实例被标记为可能的低内容,因为它太短了;请尝试下次添加更多信息,以清楚地解释问题和解决方案。
for(int i =0;i<5;i++)
{
MyObj ob1 = new MyObj();
ob1.iX = i + 5;
al.add(ob1);
}
for(int i =0;i<5;i++)
{
MyObj ob1 = new MyObj();
ob1.iX = i + 5;
al.add(ob1);
}
package com.may.arrays;
import java.util.ArrayList;
public class AddObjectToArray {
public static void main(String args[]){
ArrayList<MyObject> l_list = new ArrayList<MyObject>();
MyObject l_myObj = new MyObject();
l_myObj.holder = new MyObject2[6];
for(int i=0;i<5;i++){
l_myObj.holder[i] = new MyObject2();
l_myObj.holder[i].value = i+5;
l_list.add(l_myObj);
}
for(int j=0;j<5;j++){
System.out.println("value is: "+l_list.get(j).holder[j].value);
}
}
}
class MyObject{
MyObject2[] holder;
}
class MyObject2{
int value;
}