gpt4 book ai didi

java - List.of(...) 或 Collections.unmodifiableList()

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:17:06 27 4
gpt4 key购买 nike

如果你有一个 List<String> strings例如,你会继续写:

Collections.unmodifiableList(strings)

或切换到:

List.of(strings.toArray(new String[strings.size()]))

实例化对性能(内存和运行时方面)的初始影响是什么? List.of 中是否有运行时优势?变体?

最佳答案

这并不是一个很好的比较,因为这些方法做了不同的事情:

  • Collections::unmodifiable... 创建一个不可修改的 View 。它不是是不可变的,因为如果您更改原始的支持集合(您的示例中的 list),它会发生变化。
  • ...::of 另一方面,创建一个不可变副本。更改原始列表不会影响它。

从性能的角度来看,显然创建不可修改的包装器成本更低,因为它只创建一个具有单个字段的实例。新的工厂方法将创建至少一个对象,可能由数组支持(如果您有三个或更多元素),它需要复制到其中。

新的不可变集合的访问速度可能会更快,但这必须进行基准测试。

但正确性胜过性能。你需要什么?如果您需要不可变的副本,请使用新方法(或我更喜欢Guava 的Immutable...)。如果您需要某些东西 不可变,请使用unmodifiable... 并扔掉原来的东西(并确保它保持那样)。如果您需要调用者无法编辑的 View ,请使用 unmodifiable...

关于java - List.of(...) 或 Collections.unmodifiableList(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39385658/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com