我建议返回 Collections.unmodifiableList() 而不是直接返回成员变量,我的同事担心会影响性能。当然,最好的答案是衡量它,我们可能会这样做 - 但我想知道你的经验和任何参考,赞成或反对。
问问题
5634 次
3 回答
26
不。至少,OpenJDK 实现用 s 字面上“替换”了修改方法UnsupportedOperationException
,其余的添加了一层间接,编译器VM 应该优化掉它(即使这样,一层间接也不会很昂贵)。
如果您希望返回一个无法修改的列表,与正确性损失相比,任何性能影响都会相形见绌,我不会仅仅为了性能而避免它,如果它是您需要的,我当然不会避免它。
于 2011-07-07T00:24:49.300 回答
7
如果您查看实现,您会发现 Collections.unmodifiable 只是真正集合的一个薄包装器,它为所有删除/添加方法抛出异常,而不是转发它。所以没有性能损失(转发调用将由 JIT 内联)。
所以是的,你绝对应该在大多数时候返回一个不可修改的集合而不是原始集合——更好的编码实践。
于 2011-07-07T00:24:38.657 回答
3
如果 JIT 内联函数,则不会。如果没有,那么是的,会发生轻微的性能影响,但除非您的循环非常紧凑,否则您可能不会注意到它。
它可能会内联该函数,除非您为调试而编译。
于 2011-07-07T00:26:29.750 回答