Collections.unmodifiableList有任何性能风险吗?

时间:2011-07-07 00:20:43

标签: java collections unmodifiable

我建议返回Collections.unmodifiableList()而不是直接返回一个成员变量,我的同事担心会有性能损失。当然,最好的答案是衡量它,我们可能会这样做 - 但我想知道你的经验和任何参考,赞成或反对。

3 个答案:

答案 0 :(得分:25)

没有。至少,OpenJDK implementationUnsupportedOperationException逐字地“替换”修改方法,其余的添加了一个间接级别,它应该被编译器 VM优化掉(即便如此,一个层次的间接也不会是代价高昂的。)

如果你想要返回一个无法修改的列表,那么与正确性的损失相比,任何性能影响都会变得苍白,我不会单独避免它的性能,如果它是你的话,我当然不会避免它需要。

答案 1 :(得分:7)

如果查看实现,您会看到Collections.unmodifiable只是真实集合的一个瘦包装器,它会抛出所有remove / add方法的异常而不是转发它。所以没有任何性能损失(转发呼叫将由JIT内联)。

所以是的,你绝对应该返回一个不可修改的集合,而不是大多数时候的原始集合 - 更好的编码实践。

答案 2 :(得分:3)

如果JIT内联函数,没有。如果没有,那么是的,轻微的性能点击将会发生,但是你很可能能够注意到它,除非你' 非常紧密循环。

它可能会内联函数,除非你编译进行调试。