Now, you can get a binary form of a hashmap by serializing it. See the java.io.Serializable interface. Serializing will take the whole shebang and turn it into binary form.
You need to create an java.io.ObjectOutputStream, and then tell the hashmap to write itself out to it.
One way your applet can retrieve this file is if it downloads it separately.
If that's the case, you'll want that to pipe the ObjectOutput into a java.util.zip.GZipOutputStream. (Regular zip files (and jar files, which are the same thing) have a little extra baggage for archiving multiple files. A gzip file is designed to handle just one file.) That's not the best compression possible, but it works and is ubiquitous. Maybe something like
LZMA would get you better compression, but you'd have to add more class files to your code.
I think a java.io.FilterOutputStream is used to layer streams on top of each other. And you'll need a final layer to hook it into file output, java.io.FileOutputStream or possibly one of the writer classes. It's been a while since I've done Java I/O, it's confusing at first but once you figure out what does what, it all fits together quite nicely and is very flexible.
Reading it in is just a matter of using input where you used output. And you'll be using an HTTP connection to read in the file.
UNLESS... you decide to bundle it in your applet's jar file. Then it's already compressed by the jar (really pkzip) compression. This is a little confusing, but basically your applet's Class object has a method "getResourceAsStream". You call that with the resource name and, since your applet's jar has already downloaded, it immediately returns the InputStream with your data. In that case, you don't need to compress the data, just package it with your class files.
Pros and cons: loading a separate resource is certainly less reliable. You'll have to handle the case where the connection fails. OTOH, your applet can't do anything until the entire jar file has loaded, so the user might *think* it has failed, which is arguably just as bad, because you can't provide a progress bar.
One last thought regarding compression:
A hashed structure randomizes the elements which introduces entropy that somewhat defeats compression. As a rule of thumb, sorted structures compress better.
The additional entropy might just not make a big difference, but it's worth testing whether reading the elements of the hash into an ArrayList, sorting them and serializing that won't give you better compression. If it's not substantial, the extra time you incur repackaging the data when you load it may not be worth it.