Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/357.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java中将用户定义的对象添加到ArrayList_Java_Arraylist - Fatal编程技术网

在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;
}