我想知道哪个更有效率,为什么?
1)
List<Blah> foo;
...
return ImmutableList.copyOf(foo);
或
2)
List<Blah> foo;
...
return new ImmutableList.Builder<Blah>().addAll(foo).build();
答案 0 :(得分:29)
我认为你没有理由在这里使用构建器:
ImmutableList.copyOf
比在这种情况下制作Builder
更具可读性Builder
不会推断泛型类型,您必须指定type by
当你用作单线时,你自己ImmutableList.copyOf
does good magic(尝试避免在安全的情况下实际复制数据),Builder#addAll
在先前创建的addAll
上调用ArrayList
,而copyOf
则避免为零元素和单元素创建任何列表collections(分别返回空的不可变列表和单例不可变列表),copyOf(Collection)
实例不会创建临时ArrayList
(copyOf(Iterable)
而copyOf(Iterator)
会这样做),Builder#build
会在以前内部填充的copyOf
上调用ArrayList
,这会引出您的问题 - 为何使用{{1}在这里,当你有Builder
? P.S。我个人使用copyOf
静态工厂而不是ImmutableList.builder()
构造函数 - 当分配给new ImmutableList.Builder<Blah>()
变量时,第一个推断泛型类型,而后者则不是。
答案 1 :(得分:0)
Builder允许您添加内容。即如果您需要添加另一个对象,则可以使用Builder模式进行操作:
c1&c2&c3&c4&c5&c6=0
相对于:
ImmutableList<SomeModel> newModelObjects = new ImmutableList.Builder<SomeModel>()
.addAll(getModelObjects()).add(newModelObject).build();