我想創建一個實現給定接口的對象集合(在C#中它將是類似於Collection<IMyInterface>
)。我不關心排序或索引訪問,但想輕鬆地迭代集合foreach
(或Java等價物)。它也需要儘可能小的內存佔用(最好是線程安全)。什麼是在Java中創建對象集合的一般推薦方式?
你有什麼建議?
感謝
我想創建一個實現給定接口的對象集合(在C#中它將是類似於Collection<IMyInterface>
)。我不關心排序或索引訪問,但想輕鬆地迭代集合foreach
(或Java等價物)。它也需要儘可能小的內存佔用(最好是線程安全)。什麼是在Java中創建對象集合的一般推薦方式?
你有什麼建議?
感謝
你應該閱讀Java Collections tutorial和選擇什麼最適合您的需求。
查看Java Collection Tutorial。這將向您介紹Java集合成語,泛型支持以及可用的內容(簡要地,Lists,Sets和Maps--目前尚不清楚您想要如何存儲此數據)。
沒有任何進一步的信息,並在最瑣碎情況下,您可能希望類似:
List<IMyInterface> list = new ArrayList<IMyInterface>();
// populate and then iterate...
list.add(new MyObject());
for (IMyInterface o : list) {
// do something...
}
(忽略線程安全問題)
一旦你AU既成事實與標準集合,它是值得看看更多的高級選項,如Google Collections和Apache Commons Collections。這些都爲迭代/操作提供了更強大的集合和工具。
注意(最後)Vector和類似廣告是線程安全的。那(當然)只適用於按方法調用。收集檢查/添加操作本身不會是線程安全的,並且需要圍繞多個操作進行一些額外的同步。
Java Collections Framework包含許多您可能會覺得有用的類。他們既有線程安全的也有非線程安全的候選人。
值得注意的是,上面的鏈接是一個非常老版本的Java API的。它早在Generics之前,它應該用於任何新的Java開發。 – 2009-12-29 20:02:15
這是正確的鏈接:http://java.sun.com/javase/6/docs/technotes/guides/collections/index.html – Powerlord 2009-12-29 20:11:16
修改鏈接,修正爲+1。 – fastcodejava 2009-12-29 20:28:33
你最好的賭注它做的其中之一:
import java.util.*;
import java.util.concurrent.*;
// ...
// Thread-safe, but creates a new copy on write... so writers can write new
// values that readers won't see
List<IMyInterface> = new CopyOnWriteArrayList<IMyInterface>();
或
import java.util.*;
// ...
// also thread-safe, collection is locked during writes
List<IMyInterface> = Collections.synchronizedList(new ArrayList<IMyInterface>());
編輯:另一種回答指出,Vector類還實現了List接口,是線程安全的,所以你可以在這裏使用它而不是第二個選項。
你肯定不想使用CopyOnWriteArrayList來進行任何事情,而只是專門用途 - 與普通集合相比,對於寫入重負載來說,它將會變得極其緩慢。 – 2009-12-29 21:09:33
你可能想要使用Vector這是線程安全的,並會在這種情況下做你的目的。
Collection<Integer> collection = new Vector<Integer>();
collection.add(1); //add something to the collection
//iterate over the collection
for(Integer test : collection) {
//do something with
}
Vector's被許多人認爲是過時的,請參閱http://stackoverflow.com/questions/1386275/why-java-vector-class-is-considered-obsolete-or-deprecated – Pool 2009-12-29 20:13:46
邊注意:Java的foreach風格的語法是'爲(IMyInterface的項目:集)' – Powerlord 2009-12-29 20:08:07