scala ajouter à une LinkedList mutable
Veuillez cocher cette
import scala.collection.mutable.LinkedList
var l = new LinkedList[String]
l append LinkedList("abc", "asd")
println(l)
//prints
//LinkedList()
mais
import scala.collection.mutable.LinkedList
var l = new LinkedList[String]
l = LinkedList("x")
l append LinkedList("abc", "asd")
println(l)
//prints
//LinkedList(x, abc, asd)
Pourquoi le deuxième extrait de code fonctionne, mais le premier ne marche pas? C'est sur Scala 2.10
source d'informationauteur weima
Vous devez vous connecter pour publier un commentaire.
La documentation dit
If this is empty then it does nothing and returns that. Otherwise, appends that to this.
. C'est exactement, ce que vous avez observé. Si vous avez vraiment besoin d'une mutable liste, je vous suggère d'utiliserscala.collection.mutable.ListBuffer
au lieu de cela, avec elle, vous pouvez faireJe comprends qu'elle est liée à la Première/Dernière (
Nil
) de l'élément dans la liste (si la liste est videNil
est le premier et le dernier élément dans le même temps).LinkedList (encore) suit "charme primitif" de la stratégie. De sorte qu'il n'essayez pas d'ajouter/ajouter de nouvelles données à/après
Nil
pour avoir des résultat comme ceci: {Nul, newElement}. (Après toutNil
doit être le dernier élément)Bien sûr, il pourrait vérifier
if
liste est vide, puis mettreaddingList
au début et à laNil
à la fin. Mais ce serait "trop intelligent", je suppose.Mais, de toute façon
append()
renvoie "attend" le résultat de ce genre:result = {"a", "b"}.
Dans ce cas, elle renvoie 'addingList' elle-même, et/mais ne change pas de la liste initiale.Si nous essayons d'attribuer newElement à la
next
ref:Comme conséquence, nous avons emtyList modifié comme ceci:
I. e. il crée poing élément nullpuisque nous avons utilisé
next()
l'attribution/l'élément suivant. Donc il se déplace Nul à la fin, parce que le premier élément qui est nulle, a ensuite référence à l'élément nouveau, nous avons ajouté (addingElelement
).Parce que
la tête et dans notre cas, la tête est
Nil
maisNill
ne peut pas avoir d'autre, il a de créer de nouveaux premier élément (qui est a la valeur null) avec next() referece à notre nouveauaddingElelement
.Personnellement je trouve ça "trop primitifs" et pas "tellement élégant". Mais ça dépend, je suppose.
De tâches histoire:
Pour ma première tâche (pourquoi je commence à penser à cette "étrange" liste comportement [même si c'est mutable]), j'ai voulu utiliser mutable liste pour une classe/objet appelé
Dictionary
qui permettrait de garderWords
(dictionnaire par défaut n'a pas les mots). Et je voudrais avoir des méthodes comme unddWord(wod:String)
pour ajouter de nouveaux mots. Pour l'instant, ma mise en œuvre sera changé (je ne vais pas utiliser cetteLinkedList
mais plutôtMutableList
. Il semble qu'il est plus mutable que la précédente):Mais possible de la mise en œuvre pourrait être comme ceci:
Mais puis-je utiliser
var
au lieu deval
et je dois transformer chaque nouvelle Mot àLinkedList
et ma logique est devenu plus compliqué.