【发布时间】:2012-05-13 00:22:25
【问题描述】:
Guava 的ImmutableList 有一系列重载的of() 方法。正如在this solved question 的上下文中所讨论的,这些存在是为了避免在将可变参数与泛型混合时出现的警告。
但除此之外,0 和 1 参数方法都依赖于专门的列表实现。似乎可以对 2..11 参数方法执行相同的操作,从而减少这些列表的内存消耗 - 类似于
final class ImmutableListWith2Elements<E> extends ImmutableList<E> {
final E e1;
final E e2;
...
相反,它们使用基于数组的实现,这意味着除了内容引用之外,还存储一个数组对象和对该数组的引用。你能帮我理解这里所涉及的权衡吗?
【问题讨论】:
-
这个优势会随着元素的大小而减少,我认为保持 13 个类而不是 2 个类同步已经够烦人的了。数组的开销是 2 个字 + 1 个整数。这意味着总开销是 3 个字 + 1 个 int(访问时可能还有一个额外的间接)。对于具有