我需要在集合中存储越来越多的对象。在执行集合的每个对象的操作时,我经常需要检查对象是否已经存储。如果尚未存储对象,我会将其添加到集合的末尾。我在进行检查时迭代地处理每个对象。
不应该从集合中删除已经处理过的对象,因为当我再次偶然发现它们时,我不想让它们重新处理。
因此,我不知道哪个系列最适合。 HashSet有一个常量时间“包含”方法,但是List有更快的方法迭代它的元素,对吗?
什么是更明智的选择?保持两个不同的结构,包含相同的节点,检查的HashSet和处理的LinkedList是否相关?
答案 0 :(得分:4)
因此我不知道哪个系列最适合。 HashSet有一个常量时间“包含”方法,但是List有更快的方法来迭代它的元素,对吗?
LinkedHashSet
怎么样?
Set接口的哈希表和链表实现,具有可预测的迭代顺序。此实现与HashSet的不同之处在于它维护了一个贯穿其所有条目的双向链表。此链接列表定义迭代排序,即元素插入集合的顺序(插入顺序)
答案 1 :(得分:1)
1)使用ArrayList,而不是LinkedList。 LinkedLists消耗大量内存,迭代速度比ArrayList慢。
2)我建议使用两种数据结构。例如。为了你无法添加到一个集合wile迭代它(ConcurrentModificationException)
答案 2 :(得分:0)
好吧,您似乎对收藏的两个观点感兴趣。
所有这些操作在不同类型的堆中得到很好的支持,例如: java.util.PriorityQueue中