Мы можем реализовать очередь в java, просто используя ArrayList, но в случае Scala списки являются неизменяемыми, так как я могу реализовать очередь с помощью List в Scala.Somebody, дайте мне некоторый намек на это.Queue In Scala, используя список в scala
ответ
С неизменными списками, вы должны вернуть новый список после любой операции модифицирования. Как только вы это поняли, это просто. Минимальный (но неэффективный) реализации, где очередь также может быть неизменны:
class Queue[T](content:List[T]) {
def pop() = new Queue(content.init)
def push(element:T) = new Queue(element::content)
def peek() = content.last
override def toString() = "Queue of:" + content.toString
}
val q= new Queue(List(1)) //> q : lists.queue.Queue[Int] = Queue of:List(1)
val r = q.push(2) //> r : lists.queue.Queue[Int] = Queue of:List(2, 1)
val s = r.peek() //> s : Int = 1
val t = r.pop() //> t : lists.queue.Queue[Int] = Queue of:List(2)
Преимущество реализации стандартной библиотеки с помощью списков _two_ заключается в том, что вы получаете амортизированные постоянные издержки для 'pop', что в вашем примере не так. –
@ 0__, совершенно. Наивная реализация более очевидна для объяснительных целей, хотя –
Если мы говорим о mutable
списках, они не были бы эффективная структура для реализации очереди по следующей причине: Добавление элементов в начало списка работает очень хорошо (занимает постоянного время), но появляются элементы с конца неэффективен (занимает больше времени, чем больше элементов в списке).
У вас, однако, есть Массивы в Скале. Доступ к любому элементу массива занимает постоянное время. К сожалению, массивы не имеют динамического размера, поэтому они не будут делать хорошие очереди. Они не могут расти по мере роста вашей очереди. Однако ArrayBuffers действительно растут по мере роста вашего массива. Так что это будет отличное место для начала.
Также обратите внимание, что Scala уже имеет класс очереди: scala.collection.mutable.Queue
.
Единственный способ реализации очереди с immutable
Список должен состоять в использовании var
. Удачи!
, но можете ли вы рассказать мне, как реализовать их, используя Список –
Вам понадобится var, только если вы хотите реализовать измененную очередь с использованием неизменяемого списка, но не хотите, если вы хотите реализовать неизменяемую очередь. – pepeStck
@ppgllrd True! Я сделал неправильное предположение :) –
Это из immutable Queue в Scala:
Очередь реализован в виде пары списков, одна из которых в элементах, а другой элементы из. Элементы добавляются в список и удаляются из списка. Когда список out запущен, очередь поворачивается, заменяя out-out на in.reverse и в Nil.
Итак:
object Queue {
def empty[A]: Queue[A] = new Queue(Nil, Nil)
}
class Queue[A] private (in: List[A], out: List[A]) {
def isEmpty: Boolean = in.isEmpty && out.isEmpty
def push(elem: A): Queue[A] = new Queue(elem :: in, out)
def pop(): (A, Queue[A]) =
out match {
case head :: tail => (head, new Queue(in, tail))
case Nil =>
val head :: tail = in.reverse // throws exception if empty
(head, new Queue(Nil, tail))
}
}
var q = Queue.empty[Int]
(1 to 10).foreach(i => q = q.push(i))
while (!q.isEmpty) { val (i, r) = q.pop(); println(i); q = r }
- 1. Scala Queue и NoSuchElementException
- 2. ошибка импорта Scala Queue
- 3. Неизменяемые DataStructures In Scala
- 4. Перемешать список в Scala
- 5. используя ключевое слово running in scala test
- 6. Попытка заполнить список, используя scala и lift
- 7. Priority Queue of HashMaps в Scala
- 8. Scala REPL in Emacs
- 9. Список [Список [String]] в Scala
- 10. Genericizing Constructors in Scala
- 11. Список списков в Scala?
- 12. Список foldLeft в Scala
- 13. Список List в scala
- 14. Список признаков в Scala
- 15. Scala связанный список stackoverflow
- 16. Рекурсивно перебирать список Scala
- 17. scala список совпадений
- 18. Typedef in Scala
- 19. Inject in scala object
- 20. (), (Nothing) и _ in Scala
- 21. javascriptRouting in Play! Scala
- 22. flatMapping in scala/spark
- 23. Scala in IntelliJ error
- 24. Scala Docs in IntelliJ
- 25. Scala invoke in java
- 26. Scala REPL in Gradle
- 27. Monad Transformers in Scala
- 28. Case Classes In Scala
- 29. ArrayIndexOutofBoundsException in Knapsack Scala
- 30. Lazy Singleton in Scala
Как насчет использования Scala [ 'Queue'] (http://www.scala-lang.org/api/current/index .html # scala.collection.immutable.Queue)? –