File tree 1 file changed +15
-9
lines changed
src/library/scala/collection
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
451
451
}
452
452
453
453
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())
458
462
bldr += elem
459
463
}
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()
465
471
}
466
472
467
473
def forall (p : A => Boolean ): Boolean = {
You can’t perform that action at this time.
0 commit comments