用于在Scala中有效选择随机元素的适当集合类型

时间:2011-11-28 08:27:45

标签: scala scala-collections

对于我正在进行的项目,我需要跟踪多达数千个对象。我选择的集合需要支持随机元素的插入,选择和删除。我的算法多次执行这些操作,所以我想要一个可以在恒定时间内完成所有这些操作的集合。

有这样的收藏吗?如果没有,那么现有收藏品有哪些权衡取舍?我使用的是Scala 2.9.1。

编辑:“随机”,我的意思是数学/概率随机,即我想使用随机或其他适当的生成器从集合中随机选择元素。

2 个答案:

答案 0 :(得分:2)

定义“随机”。如果你的意思是索引,那么就没有这样的集合。如果放弃“随机元素”要求,您可以在固定时间内插入/删除 - 即,您已经删除了将要删除的元素的非常量查找,或者哪个将是插入点。或者你可以不经常插入/删除而不断查找。

最符合该要求的集合是Vector,它为这些操作提供O(log n)

另一方面,如果您有要查找或删除的元素,那么只需选择HashMap即可。它不是精确恒定时间,但它是一个公平的近似值。只要确保你有一个很好的哈希函数。

答案 1 :(得分:1)

作为起点,请查看The Scala 2.8 Collections API,尤其是Performance Characteristics