ov7*_*v7a 2 collections multithreading scala
我需要一个具有三个操作的线程安全数据结构:remove,getRandom,reset.我现在只有两个想法.
第一个:同步变量中的Seq.
val all: Array[String] = ... //all possible.
var current: Array[String] = Array.empty[String]
def getRandom(): = {
val currentAvailable = current
currentAvailable(Random.nextInt(currentAvailable.length))
}
def remove(s: String) = {
this.syncronized {
current = current diff Seq(s)
}
}
def reset(s: String) = {
this.syncronized {
current = all
}
}
Run Code Online (Sandbox Code Playgroud)
第二:保持一些Map [String,Boolean],当元素当前存在时,bool为true.主要问题是制作一个快速的getRandom方法(在最坏的情况下不是O(n)).
有没有更好的方法来实现这个?