13
我想知道哪個更有效率,爲什麼?番石榴immutableList copyOf vs生成器
1)
List<Blah> foo;
...
return ImmutableList.copyOf(foo);
或
2)
List<Blah> foo;
...
return new ImmutableList.Builder<Blah>().addAll(foo).build();
我想知道哪個更有效率,爲什麼?番石榴immutableList copyOf vs生成器
1)
List<Blah> foo;
...
return ImmutableList.copyOf(foo);
或
2)
List<Blah> foo;
...
return new ImmutableList.Builder<Blah>().addAll(foo).build();
我看不出有任何理由你應該使用建設者在這裏:
ImmutableList.copyOf
是多少比製作更可讀在這種情況下,Builder
時與其他不可變集合調用不能由此推斷泛型類型,你必須通過 自己作爲一個班輪使用時指定類型,ImmutableList.copyOf
does good magic(試圖避免實際複製數據時,它是安全的這樣做)Builder#addAll
調用先前創建ArrayList
而copyOf
避免創建任何列表addAll
對於零和一元集合(返回空不可變列表和單不可變列表分別),copyOf(Collection)
實例不創建臨時ArrayList
(copyOf(Iterable)
和copyOf(Iterator)
這樣做),Builder#build
調用copyOf
在以前內部填充ArrayList
,什麼給你帶來你的問題 - 爲什麼在這裏使用Builder
,當你有copyOf
?P.S.我個人使用ImmutableList.builder()
靜態工廠,而不是new ImmutableList.Builder<Blah>()
構造函數 - 當分配給Builder<Blah>
變量時,第一個推斷泛型,而後者不推薦。
感謝您的詳細解釋! – user973479 2012-03-01 14:47:56
你認爲這是你的性能瓶頸嗎?因爲除非你有一個特定的**理由,你爲什麼關心這個效率,你現在應該忽略這個方面,並使用更可讀的(即第一個)。 – 2012-03-01 13:42:21
在我開始在我的項目中使用番石榴之前,我只是好奇而已。我不確定哪個是'正確'的方法 – user973479 2012-03-01 13:52:04
如果有一個簡單的單方法調用方式,它完全符合您的要求並且可以使用對象構建和雙方法調用方式)同樣的事情,那麼我會每次選擇更簡單的。 – 2012-03-01 13:56:09