ArrayList vs HashMap - 大量的迭代和对象操作

时间:2014-11-21 20:17:03

标签: java multithreading arraylist hashmap copyonwritearraylist

基本上,我有一些对象的数据结构,这个结构将由多个线程访问,并且需要考虑到这一点。

需要不断地执行大量的迭代和对象操作(每次主循环迭代都会导致数据结构中的每个对象在最坏的情况下被修改,在最佳/正常情况下没有任何修改)。

目前,我使用CopyOnWriteArrayList作为我的结构。此外,在每次迭代时,我都要确保不要添加重复项,以便保持列表的大小。

使用locks / synchronized并不理想,因为我想避免为这些操作阻止线程。

据我所知,我的选择如下:

  1. 对要添加的每个元素运行contains()检查
  2. 从列表中创建HashSet并将其转换回来(基本上删除所有重复项)
  3. 使用ConcurrentHashMap代替数据结构列表
  4. 别的什么?
  5. 我知道ArrayLists在迭代方面要好得多,而对象操作和重复检查可以通过严格使用HashMap来更好地处理。由于我的案例需要两者,我想知道最好的解决方案是什么。

    我还应该提到元素的排序是没有问题的。

    编辑:为了进一步澄清这一点,该集合将不断添加,删除和修改元素。在多大程度上取决于每个特定的运行时间(基于一般的随机事件),因此我对于对其发生频率做出任何假设都很谨慎。唯一可以保证发生的事情是每次都会完全迭代集合,对每个元素执行多次检查。

1 个答案:

答案 0 :(得分:1)

这个答案解决了你的并发问题:

  

需要不断地执行大量的迭代和对象操作(每次主循环迭代都会导致数据结构中的每个对象在最坏的情况下被修改,在最佳/正常情况下没有任何修改)。

集合会被修改吗?如果不是只选择哪个集合最有意义并在对象上同步。一旦他们进入该集合,您就无法从CopyOnWriteArraylistConcurrentHashMap获得同步优势。

如果收藏品会被修改,那么跟进的频率是多少?

如果很多人不使用CopyOnWriteArrayList。如果稍微再根据最高搜索性能进行选择。