28

There is a nice flowchart (taken from here) for choosing a particular container in C++:

container-flowchart

Is there something similar for the Scala collections? I'm still somewhat overwhelmed with the options.

1 Answer 1

61

I am not aware of such flowcharts for Scala, but I guess one would be useful. I made one for you -- larger picture here.

Note that there is some added complexity, since Scala has more collections and there is both the mutable and the immutable package. Where possible, I added both alternatives to the rectangle.

I tried to follow the C++ STL flow diagram as much as possible, but I thought that the lower left part was complicating things a bit too much, so I changed the flow there slightly.

EDIT: fixed some typos.

EDIT: As Travis, suggested, note that in a majority of situations, you only need to pick between a Map, Set, List, ArrayBuffer or a Vector.

  • if you need key-value lookup, use a Map
  • if you need to check for presence of elements, use a Set
  • if you need to store elements and traverse them, use a List or an ArrayBuffer
  • if you don't need a persistent collection, but random access is really important, use ArrayBuffer
  • if you need relatively fast random access and persistent sequences, use Vector

If that does not help and you have a more exotic use-case, use this chart.

enter image description here

7
  • 1
    That's a rather nice flowchart. What did you use to make it? Commented Jun 28, 2014 at 16:02
  • The CorelDRAW application. It's pretty nice to use for vector graphics.
    – axel22
    Commented Jun 28, 2014 at 16:28
  • 2
    The vast majority of the time in idiomatic Scala you'll be using Map, Set, List, and Vector (or Seq and IndexedSeq for the last two, according to some people). This is a handy chart, but it may make the situation seem even more confusing than it really is. Commented Jun 28, 2014 at 17:43
  • That's a good point. I think I'll edit my answer to point that out.
    – axel22
    Commented Jun 28, 2014 at 17:45
  • Nice chart, but immutable.HashMap is located on both sides of question "Order is important". That is a bit confusing. Commented Jun 30, 2014 at 9:44

Not the answer you're looking for? Browse other questions tagged or ask your own question.