Osc*_*mez 2 java collections object
假设您要将x个对象添加到集合中,并在将它们添加到集合之后或之前修改对象属性.在修改对象之前或之后,何时将元素添加到集合中.
选项A)
public static void addToCollection(List<MyObject> objects) {
MyObject newObject = new MyObject();
objects.add(newObject);
newObject.setMyAttr("ok");
}
Run Code Online (Sandbox Code Playgroud)
选项B)
public static void addToCollection(List<MyObject> objects) {
MyObject newObject = new MyObject();
newObject.setMyAttr("ok");
objects.add(newObject);
}
Run Code Online (Sandbox Code Playgroud)
mdm*_*dma 12
为了安全起见,您应该在添加之前进行修改,除非有特定原因您无法执行此操作,并且您知道该集合可以处理修改.可以合理地假设该示例是安全的,因为一般List契约不依赖于对象属性 - 但是没有说明具体实现,这可能具有取决于对象值的其他行为.
TreeSet和Maps通常不会容忍在插入后修改对象,因为集合的结构取决于对象的属性.对于树,一旦添加了项目,比较器使用的任何属性都无法更改.对于地图,hashCode必须保持不变.
所以,一般来说,首先修改,然后添加.对于并发集合,这变得更加重要,因为首先添加可以导致其他集合用户在为其分配最终状态之前看到对象.
| 归档时间: |
|
| 查看次数: |
620 次 |
| 最近记录: |