A hashtable is about the same as a variable with an array.
With the exception that it has 2 arrays.
So let's so you've got a variable "Var", then with a hashtable it looks like this: Var[1][2] (with each array being independant of eachother).
Another exception is that usual arrays are capable of storing 2^13 bits, that means the maximum array of a normal arrayed variable is 8192 (anything above Var[8192] would fail).
This would ruin everything a hashtable does, as we store the ID of an object (every object has it's own unique ID in the game, this number is very high).
So now we can store Var[1][Object ID] or Var[2][Object ID] etc...
Now we've got a single variable for all objects on the map, with extra space for additional values.
Eventually, when used in spells it becomes something like this:
Var[Damage][Unit ID]
Var[AoE][Unit ID]
Var[Target][Unit ID]
And that's how we create MUI (caster = Unit ID, the variables are stored for different casters -> they don't get mixed up).
(MUI: Multi-Unit Instanceable, when every unit on the map can cast the same spell at the same time without bugging).
I hope you got all of this and it wasn't too boring (and that everything's correct, since I'm not 100% sure of that xD)
Edit: more can be found
here, in case you want to master hashtables yourself.