从不同的类复制静态arraylist的内容?

时间:2014-05-02 05:19:00

标签: java arraylist

是否可以从不同的类中获取静态arraylist的副本。我试图从另一个班级访问arraylist并总是得到一个空的回来。我假设我们可以直接访问静态变量......

基本上我想在添加一些东西之后得到arraylist的副本。我怎么能这样做?

    import java.util.ArrayList;        

    public class two {

        public static void main(String[] args) {
            // TODO Auto-generated method stub

            ArrayList<Integer> two = one.getTemp();

            for (int i = 0; i < two.size(); i++) {

                System.out.println(two.get(i));

            }               
        }        
    }

import java.util.ArrayList;

public class one {

    public static ArrayList<Integer> temp = new ArrayList<Integer>();

    public static ArrayList<Integer> getTemp() {

        return temp;
    }

    public static void main(String[] args) {
        // TODO Auto-generated method stub

        for (int i = 0; i < 10; i++) {

            temp.add(i * 10);

        }

        for (int i = 0; i < 10; i++) {

            System.out.println(temp.get(i));

        }

        while (true) {

        }
    }    
}

2 个答案:

答案 0 :(得分:0)

您正在main方法中初始化ArrayList并希望在第二个类中使用该arraylist,但是当您从此调用main方法时,Class One中的ArrayList将初始化,然后您无法在第二类中使用它。如果要在get方法调用时初始化

,请创建一个static
import java.util.ArrayList;
public class Two {

    /**
     * @param args
     */
    public static void main(String[] args) {
        System.out.println(One.temp);
        ArrayList<Integer> copy=One.temp;
        One.temp.add(100);
        System.out.println(copy);
    }

}
class One{
    public static ArrayList<Integer> temp = new ArrayList<Integer>();

    public static ArrayList<Integer> getTemp() {

        return temp;
    }

    static {
            // TODO Auto-generated method stub

            for (int i = 0; i < 10; i++) {

                temp.add(i * 10);
            }

        } 
}

输出:

[0, 10, 20, 30, 40, 50, 60, 70, 80, 90]
[0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100]

在第二课中,对象浅拷贝正在发生,所以当您在静态arraylist中进行任何更改时,它将自动显示在第二类列表中。

答案 1 :(得分:0)

您可以直接访问任何课程的static个组件。

在您的示例中,静态temp数组列表为空。它没有充满任何数据。

当调用one.getTemp()时,它返回了数组列表的默认静态实例。在该方法中,您应该检查它是否已填充。如果是空的,你应该填写并返回。

方式很多,但这是其中之一。