У меня есть карта, которая выглядит так: Map[ A -> Collection[B]]
. Эта карта обновляется в цикле - однако особенность в том, что обновления в основном означают добавление элемента B в коллекцию [B] (для некоторого ключа A).
Я пытаюсь выяснить, могу ли я ускорить процесс, изменив тип моей Коллекции с List [] на ListBuffer [].
До сих пор мой код выглядел так (упрощенно):
var incoming = new HashMap[A, List[B]() {
override def default(a: A) = List()
}
..
for(b < someCollectionOfBs){
..
incoming(b.getA) = b :: incoming(b.getA)
..
}
Это отлично работает. Теперь я изменил тип карты, чтобы она выглядела так:
var incoming = new collection.mutable.HashMap[A, ListBuffer[B]() {
override def default(a: A) = collection.mutable.ListBuffer()
}
..
for(b < someCollectionOfBs){
..
incoming(b.getA) += b
..
}
Обратите внимание на изменение в том, как элемент B добавляется в коллекцию во 2-м примере (больше нет неизменяемого List, следовательно, нам не нужно создавать и назначать новую коллекцию ...).
Но . Это не работает: incoming(X) += ..
не не обновляет значение карты для X, на самом деле это ничего не меняет.
Что мне здесь не хватает? Я думал, что смогу обновить значения изменяемого HashMap ... Итак, если мои значения являются изменяемыми коллекциями, почему я не могу просто добавить к ним элементы?