如果您有List<String> strings
实例,您是否会继续编写:
Collections.unmodifiableList(strings)
或切换至:
List.of(strings.toArray(new String[strings.size()]))
实例化对性能(在内存和运行时方面)的最初影响是什么?
List.of
变体对运行时有好处吗? 最佳答案
这并不是一个很好的比较,因为这些方法做的事情不同:
Collections::unmodifiable...
创建一个不可修改的 View 。它不是一成不变的,因为如果您要更改原始的后备集合(在示例中为list
),则它会更改。 ...::of
创建不可变的副本。更改原始列表不会影响它。 从性能的角度来看,创建不可修改的包装器显然更便宜,因为它只创建一个具有单个字段的实例。新的工厂方法将创建至少一个对象,该对象可能需要复制到该对象中,该对象可能由数组支持(如果您具有三个或更多元素)。
在新的不可变集合上访问速度可能更快,但这必须进行基准测试。
但是正确性胜过性能。你需要什么?如果您需要一个不变的副本,请使用新方法(或我希望使用的Guava的
Immutable...
)。如果您需要不可变的东西,请使用unmodifiable...
并丢弃原始文件(并确保它保持原样)。如果您需要 call 者无法编辑的 View ,请使用unmodifiable...
。