Создание массива в Scala - PullRequest
       5

Создание массива в Scala

1 голос
/ 13 марта 2012

Я помощник учителя в классе, который преподает Скала.В качестве задания я хочу, чтобы студенты реализовали класс arraylist.

В java я написал это так:

public class ArrayList<T> implements List<T>{....} 

Есть ли какая-либо эквивалентная черта List, которую я должен использовать для реализации arraylist

Ответы [ 4 ]

3 голосов
/ 14 марта 2012

Имя ArrayList предполагает, что вы должны добавить IndexedSeq . На самом деле вы, вероятно, хотите получить все вкусности, которые предоставляет IndexedSeqLike , т.е.

class ArrayList[A] extends IndexedSeq[A] with IndexedSeqLike[A, ArrayList[A]]

Это дает вам конкретные реализации head , tail , take , drop , filter и т. Д. Если вы также хотите, чтобы map , flatMap и т. Д. (Все методы, которые принимают параметр типа) работали должным образом (верните ArrayList [A] ) Вы также должны предоставить экземпляр класса типа для CanBuildFrom в объекте-компаньоне, например,

def cbf[A, B] = new CanBuildFrom[ArrayList[A], B, ArrayList[B]] {
  // TODO Implementation!
}
2 голосов
/ 13 марта 2012

Библиотека коллекции Scala очень сложна. Для обзора наследования взгляните на эти картинки:

scala.collection.immutable: http://www.scala -lang.org / documents / files / collection-api / collection.immutable.png

scala.collection.mutable: http://www.scala -lang.org / document / files / collection-api / collection.mutable.png

Также скаладок дает хороший обзор обо всех классах и особенностях библиотеки коллекций.

Имейте в виду, что в Scala List - это реальный список, то есть это LinearSeq, в Java список больше похож на IndexedSeq в Scala.

1 голос
/ 13 марта 2012

В Scala есть много интерфейсов.Во-первых, они разделяются на изменчивые и неизменные.В Java ArrayList основан на массиве - таким образом, это индексированная последовательность.В Scala интерфейс для этого - IndexedSeq[A].Поскольку ArrayList также является изменяемым, вы можете выбрать scala.collection.mutable.IndexedSeq, в противном случае scala.collection.immutable.IndexedSeq.Вместо mutable.IndexedSeq вы также можете выбрать scala.collection.mutable.Buffer, что не гарантирует время доступа O (1).

Если вы хотите использовать более функциональный подход, вы можете выбрать Seq[A] в качестве интерфейса или Iterable[A], если вы хотите иметь возможность реализовать больше, чем последовательности.

0 голосов
/ 13 марта 2012

Это будет Seq[T], а может быть IndexedSeq[T] - или даже List[T].

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...