From Oracle's Map Interface tutorial:
A Map is an object that maps keys to values. A map cannot contain duplicate keys: Each key can map to at most one value. It models the mathematical function abstraction.
So the contents of the Map in your code might be:
DimensionX => x-dimension stuff
DimensionY => y-dimension stuff
DimensionZ => z-dimension stuff
As to the difference between Maps and Arrays:
Maps store key/value pairs and provide accessors, e.g. to a value given a key.
Map<Dimension, Object> myDimensionMap = new HashMap<Dimension, Object>();
Dimension dimensionXKey = new Dimension("X");
Object dimensionXValue = myDimensionMap[dimensionXKey];
ArrayList (and Lists in general) provide ordered storage of values.
List<String> myTokenList = Arrays.asList(new String[]{"first", "second", "third"});
String firstToken = myTokenList.get(0); // "first"
Maps are great for caches, where you need to look something up based on a key; usually they're not ordered, but LinkedHashMap retains insertion order like a List.
The Map declaration in your code sample is pretty common, and it demonstrates the practice of declaring Collections variables as the interface type, and the value as an implementation of that interface. As others have pointed out, the interface (e.g. Map) defines the methods available to users, whereas the implementation (e.g. HashMap) implements logic to support the interface.
This is considered good practice because it allows you to change the underlying implementation of (in this case) Map without changing the code that uses it.