2009-12-29 127 views
1

我想創建一個實現給定接口的對象集合(在C#中它將是類似於Collection<IMyInterface>)。我不關心排序或索引訪問,但想輕鬆地迭代集合foreach(或Java等價物)。它也需要儘可能小的內存佔用(最好是線程安全)。什麼是在Java中創建對象集合的一般推薦方式?

你有什麼建議?

感謝

+1

邊注意:Java的foreach風格的語法是'爲(IMyInterface的項目:集)' – Powerlord 2009-12-29 20:08:07

回答

4

查看Java Collection Tutorial。這將向您介紹Java集合成語,泛型支持以及可用的內容(簡要地,Lists,SetsMaps--目前尚不清楚您想要如何存儲此數據)。

沒有任何進一步的信息,並在最瑣碎情況下,您可能希望類似:

List<IMyInterface> list = new ArrayList<IMyInterface>(); 
// populate and then iterate... 
list.add(new MyObject()); 
for (IMyInterface o : list) { 
    // do something... 
} 

(忽略線程安全問題)

一旦你AU既成事實與標準集合,它是值得看看更多的高級選項,如Google CollectionsApache Commons Collections。這些都爲迭代/操作提供了更強大的集合和工具。

注意(最後)Vector和類似廣告是線程安全的。那(當然)只適用於按方法調用。收集檢查/添加操作本身不會是線程安全的,並且需要圍繞多個操作進行一些額外的同步。

0

Java Collections Framework包含許多您可能會覺得有用的類。他們既有線程安全的也有非線程安全的候選人。

+1

值得注意的是,上面的鏈接是一個非常老版本的Java API的。它早在Generics之前,它應該用於任何新的Java開發。 – 2009-12-29 20:02:15

+1

這是正確的鏈接:http://java.sun.com/javase/6/docs/technotes/guides/collections/index.html – Powerlord 2009-12-29 20:11:16

+0

修改鏈接,修正爲+1。 – fastcodejava 2009-12-29 20:28:33

2

你最好的賭注它做的其中之一:

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接口,是線程安全的,所以你可以在這裏使用它而不是第二個選項。

+1

你肯定不想使用CopyOnWriteArrayList來進行任何事情,而只是專門用途 - 與普通集合相比,對於寫入重負載來說,它將會變得極其緩慢。 – 2009-12-29 21:09:33

3

你可能想要使用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 
} 
+7

Vector's被許多人認爲是過時的,請參閱http://stackoverflow.com/questions/1386275/why-java-vector-class-is-considered-obsolete-or-deprecated – Pool 2009-12-29 20:13:46

相關問題