Rom*_*man 49 java collections comparison guava
来自ImmutableList javadocs:
与Collections.unmodifiableList(java.util.List)不同,后者是一个仍然可以更改的单独集合的视图,ImmutableList的实例包含其自己的私有数据,并且永远不会更改.ImmutableList方便公共静态最终列表("常量列表"),还可以让您轻松地为调用者提供给您的类的列表的"防御性副本".
这是否意味着:
Yis*_*hai 54
不,不变性仅适用于Collection中对象的数量和引用,并不解决您在Collection中放置的对象的可变性.
不可变列表比标准JDK Collections.unmodifiableList获得的是通过使用ImmutableList保证引用的对象,它们的顺序和列表大小不能从任何源更改.使用Collections.unmodifiableList,如果其他内容具有对基础列表的引用,即使您具有对不可修改列表的引用,该代码也可以修改该列表.
但是,如果您想要真正的不变性,则必须使用不可变对象填充列表.
z5h*_*z5h 17
使用Collections.unmodifiableList
在List周围创建一个包装器.如果基础列表发生了变化,那么你的unmodifiableList视图也会发生变化.
正如文档所述,Google的代码会创建一个副本.这是一个更昂贵的计算并消耗更多的内存,但如果有人改变原始列表,它不能影响ImmutableList.
这些都不会阻止您更改列表中的对象,或者字段或字段等.
ImmutableList
类似于Collections.unmodifiableList( new ArrayList( list ) )
.请注意,新创建ArrayList
的不会分配给字段或变量.