事實上,送花兒給人s使用基本接口Collection,List,Map來代替它們的實現。爲了使thinkgs更加靈活,你可以躲在後面靜態工廠方法的實現,它允許你切換到的情況下,不同的實現你找到更好的東西(我懷疑會有在這一領域的巨大變化,但你永遠不知道)。另一個好處是,由於泛型,語法更短。
Map<String, LongObjectClasName> map = CollectionUtils.newMap();
instead of
Map<String, LongObjectClasName> map = new HashMap<String, LongObjectClasName>();
public class CollectionUtils {
.....
public <T> List<T> newList() {
return new ArrayList<T>();
}
public <T> List<T> newList(int initialCapacity) {
return new ArrayList<T>(initialCapacity);
}
public <T> List<T> newSynchronizedList() {
return new Vector<T>();
}
public <T> List<T> newConcurrentList() {
return new CopyOnWriteArrayList<T>();
}
public <T> List<T> newSynchronizedList(int initialCapacity) {
return new Vector<T>(initialCapacity);
}
...
}
即使你只是重複,一個ArrayList通常是更好的,因爲它有較少的內存開銷。 – 2009-05-22 11:18:59
+1始終總是使用接口類,除非你有充分的理由。我通過將使用List(由ArrayList支持)的實現轉換爲CopyOnWriteArrayList來解決了真正的世界問題。一行修復。始終使用接口。 – basszero 2009-05-22 11:27:08
@邁克爾,好點,但在我的寫作中沒有說明的是,添加到列表並不知道它的大小比拉取特定編號的元素更常見。但是我仍然默認使用ArrayList。 – Yishai 2009-05-22 13:10:27