5

I would like to implement a hashtable with int keys and string values. I tried the following:

import scala.collection.mutable.HashMap
val test_map = new HashMap[Int, String]
test_map += 10 -> "prog_1"
test_map += 20 -> "prog_2"
test_map += 25 -> "prog_3"
test_map += 15 -> "prog_4"
test_map += 10 -> "prog_8"

However, test_map(10) is not "prog_1", "prog_8", it is just "prog_8". It seems that this hashmap cannot have multiple values. Is there a simple way to have a multi-value hash table in Scala?

2 Answers 2

11

You can use a MultiMap if you don't care about preserving insertion order for values with the same key:

import scala.collection.mutable.{ HashMap, MultiMap, Set }

val test = new HashMap[Int, Set[String]] with MultiMap[Int, String]

test.addBinding(10, "prog_1")
test.addBinding(20, "prog_2")
test.addBinding(25, "prog_3")
test.addBinding(15, "prog_4")
test.addBinding(10, "prog_8")
Sign up to request clarification or add additional context in comments.

Comments

3

Use the MultiMap trait, to take a standard mutable HashMap and enhance it with some convenient methods for handling multi-valued maps

import scala.collection.mutable.HashMap
import scala.collection.mutable.MultiMap    
import scala.collection.mutable.Set

val test_map = new HashMap[Int, Set[String]] with MultiMap[Int, String]
test_map.addBinding(10 ,"prog_1")
test_map.addBinding(20 ,"prog_2")
test_map.addBinding(25 ,"prog_3")
test_map.addBinding(15 ,"prog_4")
test_map.addBinding(10 ,"prog_8")

2 Comments

This won't work without importing the mutable version of Set.
Vote for Travis's. He beat my by 50 seconds.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.