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

在Scala中有效选择随机元素的适当集合类型,scala,scala-collections,Scala,Scala Collections,对于我正在进行的项目,我需要跟踪多达数千个对象。我选择的集合需要支持插入、选择和删除随机元素。我的算法会多次执行这些操作,因此我希望有一个集合可以在固定时间内完成所有这些操作 有这样的收藏吗?如果没有,那么与现有集合的一些权衡是什么?我使用的是Scala 2.9.1 编辑:所谓随机,我指的是数学上/概率上的随机,也就是说,我想使用随机或其他适当的生成器从集合中随机选择元素。作为起点,请特别关注性能特征。定义随机。如果你的意思是索引,那么就没有这样的集合。如果您放弃随机元素要求,您可以在固定时间内

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

有这样的收藏吗?如果没有,那么与现有集合的一些权衡是什么?我使用的是Scala 2.9.1


编辑:所谓随机,我指的是数学上/概率上的随机,也就是说,我想使用随机或其他适当的生成器从集合中随机选择元素。

作为起点,请特别关注性能特征。

定义随机。如果你的意思是索引,那么就没有这样的集合。如果您放弃随机元素要求,您可以在固定时间内进行插入/删除,即,您可以对将被删除的元素或插入点进行非固定查找。或者,您可以在不进行常量插入/删除的情况下进行常量查找

最接近该需求的集合是向量,它为这些操作提供了OLOGN


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

你的集合应该能够包含重复的吗?元素的顺序是相关的吗?@PeterSchmitz,我不会试图存储重复的元素,元素的顺序并不重要,因为我只想随机访问它们。下面是一个例子。根据您喜欢的编程风格选择您的选择?纯粹的OOP?对集合的访问需要多大的并行性?您是否只有一个线程访问它?一旦您找到在固定时间内完成所有上述操作的集合,请告诉我们。您能否澄清您需要的操作?例如,什么是随机元素的插入?如果您在随机索引中添加元素或从随机索引中提取元素,而不是同时要求这两个元素,这难道不够吗?因为这样您就可以选择一种数据结构,该结构支持高效的追加或前置以及高效的随机访问和删除,反之亦然。你需要一个不可变的还是可变的数据结构?直到最近我还认为,因为Vector是一个IndexedSeq,它就像一个不可变的数组,但实际上它是一棵树。这有助于解释其性能特征。这里的完整矢量描述:我认为HashMap是我所需要的。谢谢