Collections.unmodifiableList 是否存在任何性能风险?
2022-09-01 20:47:09
我建议返回 Collections.unmodifiableList() 而不是直接返回成员变量,我的同事担心会对性能造成影响。当然,最好的答案是衡量它,我们可能会这样做 - 但我想知道你的经验和任何参考,赞成或反对。
我建议返回 Collections.unmodifiableList() 而不是直接返回成员变量,我的同事担心会对性能造成影响。当然,最好的答案是衡量它,我们可能会这样做 - 但我想知道你的经验和任何参考,赞成或反对。
不。至少,OpenJDK实现从字面上用s“替换”了修改方法,其余的增加了一个间接层,它应该被编译器VM优化掉(即使如此,一个级别的间接寻址也不会昂贵)。UnsupportedOperationException
如果您希望返回一个无法修改的列表,与正确性的损失相比,任何性能影响都将相形见绌,我不会仅出于性能而避免它,如果这是您需要的,我当然不会避免它。
如果你看一下实现,你会看到 Collections.unmodifiable 只是一个围绕真实集合的薄包装器,它为所有 remove/add 方法抛出一个异常,而不是转发它。因此,没有性能影响(转发呼叫将由 JIT 内联)。
所以,是的,你绝对应该返回一个不可修改的集合,而不是大多数时候的原始集合 - 更好的编码实践。