Size: a a a

Scala User Group

2021 May 21

λ

λoλdog in Scala User Group
def from[K, V](it: collection.IterableOnce[(K, V)]): Map[K, V] =
   it match {
     case it: Iterable[_] if it.isEmpty => empty[K, V]
     case m: Map[K, V] => m
     case _ => (newBuilder[K, V] ++= it).result()
   }
источник

AM

Angry Monkey in Scala User Group
Если есть - бред какой-то
источник

λ

λoλdog in Scala User Group
как видишь билдер
источник

λ

λoλdog in Scala User Group
def newBuilder[K, V]: Builder[(K, V), Map[K, V]] = new MapBuilderImpl
источник

λ

λoλdog in Scala User Group
ну и  мега метод
источник

λ

λoλdog in Scala User Group
def addOne(key: K, value: V): this.type = {
   if (switchedToHashMapBuilder) {
     hashMapBuilder.addOne(key, value)
   } else if (elems.size < 4) {
     elems = elems.updated(key, value)
   } else {
     // assert(elems.size == 4)
     if (elems.contains(key)) {
       elems = elems.updated(key, value)
     } else {
       switchedToHashMapBuilder = true
       if (hashMapBuilder == null) {
         hashMapBuilder = new HashMapBuilder
       }
       elems.asInstanceOf[Map4[K, V]].buildTo(hashMapBuilder)
       hashMapBuilder.addOne(key, value)
     }
   }

   this
 }
источник

AM

Angry Monkey in Scala User Group
def addOne(key: K, value: V): this.type = {
 
if (switchedToHashMapBuilder) {
   
hashMapBuilder.addOne(key, value)
 }
else if (elems.size < 4) {
   
elems = elems.updated(key, value)
 }
else {
   // assert(elems.size == 4)
   
if (elems.contains(key)) {
     
elems = elems.updated(key, value)
   }
else {
     
switchedToHashMapBuilder = true
     if
(hashMapBuilder == null) {
       
hashMapBuilder = new HashMapBuilder
     }
     
elems.asInstanceOf[Map4[K, V]].buildTo(hashMapBuilder)
     
hashMapBuilder.addOne(key, value)
   }
 }

 
this
}
источник

λ

λoλdog in Scala User Group
ну кароч тож самое
источник

AM

Angry Monkey in Scala User Group
override def addOne(elem: (K, V)): this.type = {
 ensureUnaliased()
 
val h = elem._1.##
 
val im = improve(h)
 update(
rootNode, elem._1, elem._2, h, im, 0)
 
this
}
источник

AM

Angry Monkey in Scala User Group
Да, за исключением странных "оптимизаций" - то же самое
источник

AM

Angry Monkey in Scala User Group
И в два раза тормознее. Странно
источник

GP

Grigory Pomadchin in Scala User Group
а что за оптимизации
источник

λ

λoλdog in Scala User Group
ух
источник

λ

λoλdog in Scala User Group
битмап мапы
источник

AM

Angry Monkey in Scala User Group
Короче
источник

AM

Angry Monkey in Scala User Group
Заменяю .toMap на .to(mutable.Map)
источник

AM

Angry Monkey in Scala User Group
И получаю те же четыре минуты
источник

AM

Angry Monkey in Scala User Group
Такие дела
источник

λ

λoλdog in Scala User Group
ну там дичь да
источник

λ

λoλdog in Scala User Group
if (elems.contains(key)) {
       elems = elems.updated(key, value)
     } else {
       switchedToHashMapBuilder = true
источник