Guava ImmutableList copyOf vs Builder
我想知道哪个更有效率,为什么?
1)
List foo; ... return ImmutableList.copyOf(foo);
要么
2)
List foo; ... return new ImmutableList.Builder().addAll(foo).build();
我没有看到你为什么要在这里使用建设者的原因:
- 在这种情况下,
ImmutableList.copyOf
比Builder
更具可读性, -
Builder
不会推断generics类型,当你用作单行时,你必须自己指定类型, - (来自docs)
ImmutableList.copyOf
在使用另一个不可变集合调用时会做出很好的魔术 ( 试图避免在安全的情况下实际复制数据 ), - (来自源代码)
Builder#addAll
在先前创建的ArrayList
上调用addAll
,而copyOf
避免为零元素和单元素集合创建任何列表(分别返回空的不可变列表和单例不可变列表), - (来自源码)
copyOf(Collection)
实例不创建临时ArrayList
(copyOf(Iterable)
和copyOf(Iterator)
这样做), - (来自源代码)此外,
Builder#build
在以前内部填充的ArrayList
上调用copyOf
,这会带给您什么问题 – 为什么在这里使用Builder
,当你有copyOf
?
PS我个人使用ImmutableList.builder()
静态工厂而不是new ImmutableList.Builder
构造函数 – 当分配给Builder
变量时,第一个推断generics类型,而后者则不是。