What is the difference between HashSet and Set and when should each one be used? Here's Map vs HashMap:
val hashSet = HashSet("Tomatoes", "Chilies")
val set = Set("Tomatoes", "Chilies")
set == hashSet // res: Boolean = true
Set is a trait. You can create an instance of a Set by invoking apply method of its companion object, which returns an instance of a default, immutable Set. For example:
val defaultSet = Set("A", "B")
HashSet is a concrete implementation of a Set which can be instantiated as follows:
val hashSet = HashSet("A", "B")
Have a look at the cite from "Programming in Scala" that explains the differences between various implementations:
The
scala.collection.mutable.Set()factory method, for example, returns ascala.collection.mutable.HashSet, which uses a hash table internally. Similarly, thescala.collection.mutable.Map()factory returns ascala.collection.mutable.HashMap.The story for immutable sets and maps is a bit more involved. The class returned by the
scala.collection.immutable.Set()factory method, for example, depends on how many elements you pass to it, as shown in the table below. For sets with fewer than five elements, a special class devoted exclusively to sets of each particular size is used, to maximize performance. Once you request a set that has five or more elements in it, however, the factory method will return an implementation that uses hash tries.
Number of elements Implementation
0 scala.collection.immutable.EmptySet
1 scala.collection.immutable.Set1
2 scala.collection.immutable.Set2
3 scala.collection.immutable.Set3
4 scala.collection.immutable.Set4
5 or more scala.collection.immutable.HashSet
It means that for an immutable Set with 5 or more elements, both of your calls should return an instance of the same Set subclass.
The same goes for Maps. See this link.
When you call the Set or Map functions, you're actually calling the .apply method of the Set or Map object. These are factory methods which choose appropriate types as documented in Rarry's answer. In contrast, when you directly instantiate a HashSet, you're making the choice yourself.
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