The*_*eLQ 8 java collections hashmap hashset
我有大约420,000个元素需要存储在某种Set或List中.但是限制是我需要能够选择一个随机元素并且需要快速.
最初我使用了ArrayList和LinkedList,但是有很多元素它很慢.当我对它进行分析时,我看到equals()我存储的对象中的方法在很短的时间内被称为大约2100万次.
接下来我尝试了一个HashSet.我在性能方面获得的东西我在功能上松了一口气:我不能选择随机元素.HashSet由HashMap支持,HashMap由一组HashMap.Entry对象支持.然而,当我试图暴露它们时,我被整个Java Collections Framework的疯狂私有和包私有可见性所阻碍(即使复制和粘贴类也不起作用,JCF非常"使用我们拥有的东西或滚动你自己的东西").
随机选择存储在HashSet或HashMap中的元素的最佳方法是什么?由于集合的大小,我宁愿不使用循环.
重要编辑:我忘记了一个非常重要的细节:我究竟是如何使用Collection的.我在桌子的乞讨处填充整个收藏品.在程序中,我选择并删除一个随机元素,然后选择并删除一些更多的已知元素,然后重复.不断查找和更改是导致缓慢的原因
没有理由为什么 anArrayList或 aLinkedList需要调用equals()...尽管您不想要 aLinkedList这里,因为您希望通过索引快速随机访问。
AnArrayList应该是理想的 - 创建一个适当的容量,将所有项目添加到其中,然后您可以重复选择适当范围内的随机数,并调用get(index)以获取相关值。
HashMap并且HashSet根本不适合这个。
| 归档时间: |
|
| 查看次数: |
7693 次 |
| 最近记录: |