I will tell you a couple of things.
First of all, Hashtables are used to ensure that multiple instances of the same object-type can be used simultaneously, without colliding with each other. So, I will speak of the MUI case (Multiple Unit Instanceability). If you have a spell cast once and it runs for 10 seconds, unless you use Hashtable or an indexing system, the same spell cast by another unit will interrupt the first cast.
So, there are two ways of storing data: indexing systems and hashtables.
Most coders prefer indexing systems, because they load stuff back faster than hashtables.
On the other hand, Warcraft 3 is not enhanced with multi-dimensional arrays, which means that each variable (with array) can hold a maximum of 8192 instances. Hashtables can hold a data amount of 408000 instances. Although these are numbers that you can see in posts around the forums, I really doubt someone has ever tested 408000 instances at the same time, simply because the game would crash for using such a high amount of memory, not to mention that having 408000 units on the map is nearly impossible (lag-wise).
So, we focus on these conventional numbers and we seperate indexing systems from hashtables.
• Arrays are faster to load than hashtables (the timing issue is almost negligible to be honest, it's a matter of 0.076 extra seconds).
• Arrays can hold less data than hashtables.
I prefer using hashtables, as I find them easier to use, whereas Indexing systems can become a bit messy and it is easier to make mistakes.
Finally, for someone that begins their course into actual triggering, I recommend hashtables, because they are more newbie-friendly. :]