对象内的对象的Arraylist

时间:2014-09-21 17:27:01

标签: java android

假设我使用如下代码:

public class MyObject {
    private int id;
    private ArrayList<MyObject> otherObjects;

    public MyObject(int id) {
        this.id = id;
        ArrayList<MyObject> otherObjects = new ArrayList<MyObject>();
        otherObjects.add(new MyObject(id + 1));
        this.otherObjects = otherObjects;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public ArrayList<MyObject> getOtherObjects() {
        return otherObjects;
    }

    public void setOtherObjects(ArrayList<MyObject> otherObjects) {
        this.otherObjects = otherObjects;
    }
}

我应该注意哪些陷阱?我的另一个问题是,如果我可以制作这个Parcellable类?

2 个答案:

答案 0 :(得分:4)

如果您使用不同的线程运行它,那么您将拥有数据竞争,因为您没有锁定全局变量。

答案 1 :(得分:1)

添加到 Mathew Palsberg 所说的

ArrayList 是不同步的,因此它们不是线程安全的。

  

请注意,此实现未同步。 如果是多个线程   同时访问一个ArrayList实例,并且至少有一个   线程在结构上修改列表,必须同步   外部即可。 (结构修改是添加或的任何操作   删除一个或多个元素,或显式调整后备数组的大小;   仅设置元素的值不是结构   修改。)这通常通过同步一些来完成   自然封装列表的对象。如果不存在这样的对象,   列表应该使用Collections.synchronizedList“包装”   方法。 这最好在创建时完成,以防止意外   对列表的不同步访问:

     

列表list = Collections.synchronizedList(new ArrayList(...));

来源:http://docs.oracle.com/javase/6/docs/api/java/util/ArrayList.html