web-dev-qa-db-fra.com

Quelle liste scala mutable utiliser?

Ceci est une question de suivi pour Non Scala liste mutable

Je souhaite utiliser une liste modifiable dans Scala. Je peux choisir parmi

Ce qui est bien, mais quel est le "standard", recommandé, idiomatique scala? Je veux juste utiliser une liste à laquelle je peux ajouter des choses à l'arrière.

Dans mon cas, j'utilise un HashMap, où les "listes" (je veux dire au sens général) seront du côté de la valeur. Ensuite, je lis quelque chose dans un fichier et pour chaque ligne, je veux trouver la bonne liste dans la table de hachage et ajouter la valeur à la liste.

30
Karel Bílek

Pour le plaisir des lecteurs qui visitent cette vieille question: La section Concrete Mutable Collection Classes de la documentation a un aperçu des classes de liste modifiables, y compris des explications sur le moment de les utiliser.

17
Daniel Werner

Cela dépend de ce dont vous avez besoin.

DoubleLinkedList est une liste chaînée qui vous permet de faire des va-et-vient dans la liste des nœuds. Utilisez ses références prev et next pour aller au nœud précédent ou suivant, respectivement.

LinkedList est une liste liée individuellement, il n'y a donc pas de pointeurs prev - si vous ne faites que passer à l'élément suivant de la liste tout le temps, c'est ce dont vous avez besoin.

EDIT: Notez que les deux ci-dessus sont destinés à être utilisés en interne comme blocs de construction pour des structures de liste plus compliquées comme MutableLists qui prennent en charge l'ajout efficace et mutable.Queue S.

Les deux collections ci-dessus ont toutes deux des opérations d'ajout en temps linéaire.

ListBuffer est une classe tampon. Bien qu'il soit soutenu par une structure de données de liste liée individuellement, il n'expose pas le pointeur next au client, vous ne pouvez donc le parcourir qu'à l'aide d'itérateurs et de foreach. Son utilisation principale est cependant un tampon et un générateur de liste immuable - vous y ajoutez des éléments via +=, Et lorsque vous appelez result, vous récupérez très efficacement une fonction immutable.List. Contrairement aux listes mutables et immuables, les opérations d'ajout et de pré-ajout sont à temps constant - vous pouvez ajouter à la fin via += Très efficacement.

MutableList est utilisé en interne, vous ne l'utilisez généralement pas sauf si vous prévoyez d'implémenter une classe de collection personnalisée basée sur la structure de données de liste liée individuellement. Les files d'attente mutables, par exemple, héritent de cette classe. La classe MutableList possède également une opération d'ajout efficace à temps constant, car elle conserve une référence au dernier nœud de la liste.

35
axel22

Si vous souhaitez ajouter des éléments, vous ne devez pas du tout utiliser un List. Lists sont utiles lorsque vous souhaitez ajouter des éléments. Utilisez ArrayBuffer à la place.

10
drexin

Je veux juste utiliser une liste à laquelle je peux ajouter des choses au verso.

Choisissez ensuite quelque chose qui implémente Growable . Je suggère personnellement une des implémentations Buffer.

Je reste à l'écart de LinkedList et DoubleLinkedList, car ils sont présents principalement en tant qu'implémentation sous-jacente d'autres collections, mais ont quelques bugs jusqu'à Scala 2.9. x. À partir de Scala 2.10.0, je m'attends à ce que les diverses corrections de bogues les aient mis aux normes. Pourtant, il leur manque certaines méthodes que les gens attendent, telles que +=, que vous trouverez sur les collections basées sur eux.

2
Daniel C. Sobral