/* __ *\ ** ________ ___ / / ___ Scala API ** ** / __/ __// _ | / / / _ | (c) 2003-2009, LAMP/EPFL ** ** __\ \/ /__/ __ |/ /__/ __ | http://scala-lang.org/ ** ** /____/\___/_/ |_/____/_/ | | ** ** |/ ** \* */ // $Id$ package scala.collection package mutable import generic._ /** * @since 1 */ @serializable @SerialVersionUID(-8682987922734091219L) class HashMap[A, B] extends Map[A, B] with MapLike[A, B, HashMap[A, B]] with HashTable[A] { override def empty: HashMap[A, B] = HashMap.empty[A, B] override def clear() = super.clear() override def size: Int = super[HashTable].size type Entry = DefaultEntry[A, B] def get(key: A): Option[B] = { val e = findEntry(key) if (e == null) None else Some(e.value) } override def put(key: A, value: B): Option[B] = { val e = findEntry(key) if (e == null) { addEntry(new Entry(key, value)); None } else { val v = e.value; e.value = value; Some(v) } } override def update(key: A, value: B): Unit = put(key, value) override def remove(key: A): Option[B] = { val e = removeEntry(key) if (e ne null) Some(e.value) else None } def += (kv: (A, B)): this.type = { val e = findEntry(kv._1) if (e == null) addEntry(new Entry(kv._1, kv._2)) else e.value = kv._2 this } def -=(key: A): this.type = { removeEntry(key); this } def iterator = entriesIterator map {e => (e.key, e.value)} } /** This class implements mutable maps using a hashtable. * * @author Matthias Zenger * @author Martin Odersky * @version 2.8 */ object HashMap extends MutableMapFactory[HashMap] { implicit def canBuildFrom[A, B]: CanBuildFrom[Coll, (A, B), HashMap[A, B]] = new MapCanBuildFrom[A, B] def empty[A, B]: HashMap[A, B] = new HashMap[A, B] }