如果您有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...

    10-07 12:04