我在Scala中相对较新,并且在决定最佳方式进行线程安全收集方面苦苦挣扎。
我有一个负责注册/取消注册订单的演员。
我能够实现它 class OrderOperationActor(orders: ListBuffer[Order]) extends Actor{
override def receive = {
case incomingOrder: IncomingOrder => {
if(incomingOrder.orderOperation == OrderOperation.Register){
println("Registering a new order in the list ")
orders += incomingOrder.order
sender ! orders
}
else{
println("Un-registering a new order in the list ")
orders -= incomingOrder.order
sender ! orders
}
}
}
}
但是想知道它是否是最佳选择,因为删除项目的时间复杂度会很高?我们可以使用地图吗?
答案 0 :(得分:0)
不可变的收藏品。这使得ListBuffer
绝对禁止!实际上,一般来说,目标是不变性(绝对是在演员之间传递消息或者你的实现将被打破)。您必须从scala.collection.immutable
包中明确导入它们。另一方面,我看不出为什么你会传递一系列订单而不是在演员中声明它为var
的原因。