我想创建一个实现给定接口的对象集合(在C#中它类似于Collection<IMyInterface>
)。我不关心排序或索引访问,但希望使用foreach
(或Java等价物)轻松迭代集合。它还需要尽可能小的内存占用(理想情况下是线程安全)。
你推荐什么?
由于
答案 0 :(得分:5)
您应该阅读Java Collections tutorial并选择最适合您需求的内容。
答案 1 :(得分:4)
查看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 fait ,就值得查看更高级的选项,例如Google Collections和Apache 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包含许多您可能会觉得有用的课程。他们有线程安全和非线程安全的候选人。