This is just so you can treat HashSet1 and HashSetCollision1 the same, because they are both leaves as far as the Trie data structure is concerned. I will add a comment.

Regarding HashSet2, HashSet3, ...: both @Ichoran and me agreed that those are a bad idea because of megamorphic call sites and general increase in complexity. So the comments regarding HashSet2, .. should be removed. I did a pull request for that. https://github.com/scala/scala/pull/3323