java - google 的 ImmutableList 和 Collections.unmodifiableList() 有什么区别?

标签 java collections comparison guava

来自 ImmutableList javadocs:

Unlike Collections.unmodifiableList(java.util.List), which is a view of a separate collection that can still change, an instance of ImmutableList contains its own private data and will never change. ImmutableList is convenient for public static final lists ("constant lists") and also lets you easily make a "defensive copy" of a list provided to your class by a caller.

是不是意味着:

  1. 如果我有 Dimension 对象的 ImmutableList(例如),那么我不能更改其中的任何 Dimension 对象?
  2. 如果我有 Dimension 对象的 Collections.unmodifiableList(列表),那么我不仅可以添加或删除任何对象,还可以更改它们(例如调用 setDimension(width, height) 方法)?

最佳答案

不,不可变性仅适用于Collection中对象的数量和引用,并不涉及您放入Collection中的对象的可变性。

Immutable 列表优于标准 JDK Collections.unmodifiableList 的地方在于,使用 ImmutableList 可以保证引用的对象、它们的顺序和列表的大小不能从任何来源改变。使用 Collections.unmodifiableList 如果其他内容引用了基础列表,即使您引用了不可修改的列表,该代码也可以修改列表。

但是,如果您想要真正的不变性,则必须用不可变对象(immutable对象)填充列表。

关于java - google 的 ImmutableList 和 Collections.unmodifiableList() 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2185789/

相关文章:

java - Liferay Service Builder 中的一对多关系

java - Oculus Rift,java失败的简单示例

将多个集合作为一个访问的Java方法,无需连接

c# - 适合可变深度列表的集合?

java - 比较树节点

awk - 根据列的前两个字母过滤

Java多线程: how does thread creation with Runnable interface work?

java - Android - java - 如何通过 GregorianCalendar 参数对对象列表进行排序

c - 我宣布 PI ,读取 alpha,但它没有进入指令。为什么它不打印0?

web-applications - 流行的 Web 框架之间的主要区别是什么?