在Java中创建对象集合的一般建议方法是什么?

时间:2009-12-29 19:51:25

标签: java collections

我想创建一个实现给定接口的对象集合(在C#中它类似于Collection<IMyInterface>)。我不关心排序或索引访问,但希望使用foreach(或Java等价物)轻松迭代集合。它还需要尽可能小的内存占用(理想情况下是线程安全)。

你推荐什么?

由于

5 个答案:

答案 0 :(得分:5)

您应该阅读Java Collections tutorial并选择最适合您需求的内容。

答案 1 :(得分:4)

查看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...
}

(忽略线程安全问题)

一旦您使用标准集合 au fait ,就值得查看更高级的选项,例如Google CollectionsApache Commons Collections。这些都为迭代/操作提供了更强大的集合和工具。

注意(最后)将Vector等广告为线程安全的。那(当然)只适用 per-method-call 。集合检查/添加操作本身不是线程安全的,并且需要围绕多个操作进行一些额外的同步。

答案 2 :(得分: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 
}

答案 3 :(得分: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接口并且是线程安全的,所以你可以在这里使用它而不是第二个选项。

答案 4 :(得分:0)

Java Collections Framework包含许多您可能会觉得有用的课程。他们有线程安全和非线程安全的候选人。