File tree Expand file tree Collapse file tree 1 file changed +15
-9
lines changed
src/library/scala/collection Expand file tree Collapse file tree 1 file changed +15
-9
lines changed Original file line number Diff line number Diff line change @@ -451,17 +451,23 @@ trait TraversableLike[+A, +Repr] extends Any
451451 }
452452
453453 def groupBy [K ](f : A => K ): immutable.Map [K , Repr ] = {
454- val m = mutable.Map .empty[K , Builder [A , Repr ]]
455- for (elem <- this ) {
456- val key = f(elem)
457- val bldr = m.getOrElseUpdate(key, newBuilder)
454+ object m extends mutable.HashMap [K , Builder [A , Repr ]] {
455+ override def entriesIterator : Iterator [mutable.DefaultEntry [K , Builder [A , Repr ]]] =
456+ super .entriesIterator
457+ }
458+ val newBuilderFunction = () => newBuilder
459+ for (elem <- this .seq) {
460+ val key = f(elem)
461+ val bldr = m.getOrElseUpdate(key, newBuilderFunction())
458462 bldr += elem
459463 }
460- val b = immutable.Map .newBuilder[K , Repr ]
461- for ((k, v) <- m)
462- b += ((k, v.result))
463-
464- b.result
464+ val it = m.entriesIterator
465+ val m1 = if (m.size > 4 ) immutable.HashMap .newBuilder[K , Repr ] else immutable.Map .newBuilder[K , Repr ]
466+ while (it.hasNext) {
467+ val entry = it.next()
468+ m1.+= ((entry.key, entry.value.result()))
469+ }
470+ m1.result()
465471 }
466472
467473 def forall (p : A => Boolean ): Boolean = {
You can’t perform that action at this time.
0 commit comments