2014-07-13 2 views
1

Как я могу получить совпадающий или потокобезопасный Map в Scala, чьи ключи слабы? Например, есть collection.mutable.WeakHashMap, но он, похоже, не поддерживает параллельный доступ/обновление. Дешевым решением было бы скрыть его за обычной синхронизированной синхронизацией Java?Речевая карта слабых клавиш хэша

ответ

2

Использовать Guava's MapMaker.

Пример из док показывает именно то, что вам нужно (в переводе на Scala):

import java.util.concurrent.ConcurrentMap 

val timers: ConcurrentMap[Request, Stopwatch] = 
    new MapMaker().concurrencyLevel(4).weakKeys.makeMap 

Это, конечно же, Java карта, но вы можете легко обернуть его в карту Scala:

import java.{util => ju} 
import scala.collection.JavaConverters._ 
import scala.collection.mutable 

val javaMap: ju.Map[String,String] = ... 
val scalaMap: mutable.Map[String,String] = javaMap.asScala 
+0

Хорошо, но есть ли что-то менее тяжелое, чем рисование в полной сторонней библиотеке? –

+0

@ 0__ Если вам нужна карта, которая является _concurrent_ (а не только синхронизирована) и имеет слабые клавиши, я не думаю, что такая реализация существует в стандартных библиотеках. – ghik

Смежные вопросы