Я хотел бы знать, в каких ситуациях структура данных оптимальна для использования проверок "содержит" или "существует".
Я спрашиваю, потому что я исхожу из фона Python и использую выражения if x in something:
для всего. Например, какие выражения оцениваются быстрее:
val m = Map(1 -> 1, 2 -> 2, 3 -> 3, 4 -> 4)
//> m : scala.collection.immutable.Map[Int,Int] = Map(1 -> 1, 2 -> 2, 3 -> 3, 4
//| -> 4)
val l = List(1,2,3,4) //> l : List[Int] = List(1, 2, 3, 4)
val v = Vector(1,2,3,4) //> v : scala.collection.immutable.Vector[Int] = Vector(1, 2, 3, 4)
m.exists(_._1 == 3) //> res0: Boolean = true
m.contains(3) //> res1: Boolean = true
l.exists(_ == 3) //> res2: Boolean = true
l.contains(3) //> res3: Boolean = true
v.exists(_ == 3) //> res4: Boolean = true
v.contains(3) //> res5: Boolean = true
Интуитивно, я бы предположил, что векторы должны быть самыми быстрыми для случайных проверок, и списки быстрей, если известно, что проверенное значение находится в начале списка и есть много данных. Тем не менее, подтверждение или исправление будут приветствоваться. Кроме того, не стесняйтесь распространяться на другие структуры данных.
Примечание. Пожалуйста, дайте мне знать, если вы чувствуете, что этот вопрос слишком расплывчатый, поскольку я не уверен, что правильно его формулирую.