处理集合值的复杂性

时间:2011-02-14 11:24:02

标签: java collections complexity-theory

我需要在集合中存储越来越多的对象。在执行集合的每个对象的操作时,我经常需要检查对象是否已经存储。如果尚未存储对象,我会将其添加到集合的末尾。我在进行检查时迭代地处理每个对象。

不应该从集合中删除已经处理过的对象,因为当我再次偶然发现它们时,我不想让它们重新处理。

因此,我不知道哪个系列最适合。 HashSet有一个常量时间“包含”方法,但是List有更快的方法迭代它的元素,对吗?

什么是更明智的选择?保持两个不同的结构,包含相同的节点,检查的HashSet和处理的LinkedList是否相关?

3 个答案:

答案 0 :(得分:4)

  

因此我不知道哪个系列最适合。 HashSet有一个常量时间“包含”方法,但是List有更快的方法来迭代它的元素,对吗?

LinkedHashSet怎么样?

  

Set接口的哈希表和链表实现,具有可预测的迭代顺序。此实现与HashSet的不同之处在于它维护了一个贯穿其所有条目的双向链表。此链接列表定义迭代排序,即元素插入集合的顺序(插入顺序)

答案 1 :(得分:1)

1)使用ArrayList,而不是LinkedList。 LinkedLists消耗大量内存,迭代速度比ArrayList慢。

2)我建议使用两种数据结构。例如。为了你无法添加到一个集合wile迭代它(ConcurrentModificationException)

答案 2 :(得分:0)

好吧,您似乎对收藏的两个观点感兴趣。

  1. 像视图一样的队列,将内容添加到最后并在前面检查它们。
  2. A包含支票
  3. 所有这些操作在不同类型的堆中得到很好的支持,例如: java.util.PriorityQueue中