Alex Rivera | Logout

Creating lists and sets in Scala: What do I actually get?

Asked 2010-06-30T13:09:54.090
13

If I create a Set in Scala using Set(1, 2, 3) I get an immutable.Set.

scala> val s = Set(1, 2, 3)
s: scala.collection.immutable.Set[Int] = Set(1, 2, 3)

Q1: What kind of Set is this actually? Is it some hash-set? What is the complexity of look-ups for instance?

Q2: Where can I read up on this "set-creating" method? I thought that it was the apply method but the docs says "This method allows sets to be interpreted as predicates. It returns true, iff this set contains element elem."


Similarly, if I create a List using List(1, 2, 3), I get

scala> val l = List(1, 2, 3)
l: List[Int] = List(1, 2, 3)

scala> l.getClass
res13: java.lang.Class[_] = class scala.$colon$colon

Q3: Again, what do I get? In this case I can't even immediately tell if it's mutable or not, since it's not even part of the scala.collection-package. Why does this live in the scala package?

Q4: Where in the API can I read about this "list-creating" method?

Edit
Report

1 Answer

23

Q1: In this specific case you get a Set3 which is an immutable set of exactly three arguments. Presumably it uses if-else if-else to check inclusion. If you create a set of more than 4 elements, you get an immutable hash set.

Q2: You need to look at the apply method of the object Set, not the class. The apply method of the Set class is what is called when you do someSet(something).

Q3: scala.:: is a non-empty immutable singly linked list (if you do List() without arguments, you get Nil which is an immutable empty list). It lives in the scala package because it is considered so basic that it belongs in the base package.

Q4: See Q2.

answered 2010-06-30T13:16:14.980

Your Answer