I'm very confused by Scala's HashSet
and Set
types as they both seem to do the same thing.
HashSet
is an "explicit set class" (as compared to Set
). What does that mean?A Set is a generic set of values with no duplicate elements. A TreeSet is a set where the elements are sorted. A HashSet is a set where the elements are not sorted or ordered.
Scala Set is a collection of pairwise different elements of the same type. In other words, a Set is a collection that contains no duplicate elements. HashSet implements immutable sets and uses hash table.
There are two kinds of Sets, the immutable and the mutable. The difference between mutable and immutable objects is that when an object is immutable, the object itself can't be changed. By default, Scala uses the immutable Set.
Scala's mutable and immutable HashSet
implementations are concrete classes which you can instantiate. For example, if you explicitly ask for a new scala.collection.immutable.HashSet
, you will always get a set which is implemented by a hash trie. There are other set implementations, such as ListSet
, which uses a list.
Set
is a trait which all the set implementations extend (whereas in Java, Set
is an interface).
Set
is also a companion object* with an apply
** method. When you call Set(...)
, you're calling this factory method and getting a return value which is some kind of Set
. It might be a HashSet
, but could be some other implementation. According to 2, the default implementation for an immutable set has special representation for empty set and sets size up to 4. Immutable sets size 5 and above and mutable sets all use hashSet.
*In Scala, instead of having static class methods, you can create a singleton object
with the same name as your class or trait. This is called a companion object, and methods you define on it can be called as ObjectName.method()
, similar to how you'd call a static method in Java.
**Set(x)
is syntactic sugar for Set.apply(x)
.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With