Skip to content

Commit 4ae695b

Browse files
committed
Update LinkedHash{Map,Set} from factory method
Signed-off-by: Liang Yan <[email protected]>
1 parent 942f77f commit 4ae695b

File tree

2 files changed

+17
-10
lines changed

2 files changed

+17
-10
lines changed

library/src/scala/collection/mutable/LinkedHashMap.scala

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -478,11 +478,12 @@ object LinkedHashMap extends MapFactory[LinkedHashMap] {
478478

479479
def empty[K, V] = new LinkedHashMap[K, V]
480480

481-
def from[K, V](it: collection.IterableOnce[(K, V)]) =
482-
it match {
483-
case lhm: LinkedHashMap[K, V] => lhm
484-
case _ => Growable.from(empty[K, V], it)
485-
}
481+
def from[K, V](it: collection.IterableOnce[(K, V)]) = {
482+
val newlhm = empty[K, V]
483+
newlhm.sizeHint(it.knownSize)
484+
newlhm.addAll(it)
485+
newlhm
486+
}
486487

487488
def newBuilder[K, V] = new GrowableBuilder(empty[K, V])
488489

library/src/scala/collection/mutable/LinkedHashSet.scala

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,11 @@ class LinkedHashSet[A]
8282

8383
def contains(elem: A): Boolean = findEntry(elem) ne null
8484

85+
override def sizeHint(size: Int): Unit = {
86+
val target = tableSizeFor(((size + 1).toDouble / LinkedHashSet.defaultLoadFactor).toInt)
87+
if (target > table.length) growTable(target)
88+
}
89+
8590
override def add(elem: A): Boolean = {
8691
if (contentSize + 1 >= threshold) growTable(table.length * 2)
8792
val hash = computeHash(elem)
@@ -311,11 +316,12 @@ object LinkedHashSet extends IterableFactory[LinkedHashSet] {
311316

312317
override def empty[A]: LinkedHashSet[A] = new LinkedHashSet[A]
313318

314-
def from[E](it: collection.IterableOnce[E]) =
315-
it match {
316-
case lhs: LinkedHashSet[E] => lhs
317-
case _ => Growable.from(empty[E], it)
318-
}
319+
def from[E](it: collection.IterableOnce[E]) = {
320+
val newlhs = empty[E]
321+
newlhs.sizeHint(it.knownSize)
322+
newlhs.addAll(it)
323+
newlhs
324+
}
319325

320326
def newBuilder[A] = new GrowableBuilder(empty[A])
321327

0 commit comments

Comments
 (0)