簡體   English   中英

在Java中創建對象集合的一般推薦方法是什么?

[英]What is the generally recommended way of creating a collection of objects in Java?

我想創建實現給定接口的對象的集合(在C#中將類似於Collection<IMyInterface> )。 我不在乎排序或索引訪問,但想輕松地使用foreach (或等效的Java)對集合進行迭代。 它還需要具有盡可能小的內存占用空間(理想情況下是線程安全的)。

您有什么推薦的嗎?

謝謝

您應該閱讀Java Collections教程,然后選擇最適合您的需求。

查看Java Collection Tutorial 這將向您介紹Java集合的慣用法,泛型支持以及可用的功能(簡而言之,就是ListsSetsMaps -您不清楚如何存儲此數據)。

如果沒有任何進一步的信息,並且在最瑣碎的情況下,您可能想要類似以下內容:

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

(忽略線程安全問題)

一旦您對標准集合有所了解,就應該去看看Google CollectionsApache Commons Collections等更高級的選項。 它們都提供了更強大的集合和用於迭代/操作的工具。

注意(最后),Vector和類似的內容被宣告為線程安全的。 (當然)僅適用於按方法調用 收集檢查/添加操作本來就不是線程安全的,並且需要在多個操作周圍進行一些額外的同步。

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

最好選擇執行以下操作之一:

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接口,並且是線程安全的,因此您可以在此處使用它代替第二個選項。

Java Collections Framework包含許多您可能會發現有用的類。 它們同時具有線程安全和非線程安全的候選對象。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM