Your question is "is there a better way?" and of course the only answer is: it depends. What are you trying to improve?
If you're trying to improve the time it takes to retrieve a particular MyObject, then using Maps is a fine way to go.
If you're trying to improve the memory usage, then there are several techniques you could use. You could stick with the Maps and use String interning as well as setting the size of the Maps, but that will only work if you know certain things ahead of time. You could get rid of the maps and use arrays instead, but then you sacrifice the ease of lookup time.
You could also use something like an in-memory Derby database, but that might be overkill for small tasks.
Have you actually encountered a problem with this code? If not, then you probably shouldn't worry too much about it, as premature optimization is the root of all evil.
The other thing to keep in mind is the ease of maintenance. If you switch to a multidimensional array, you might save a bunch of memory, but your code will be much more difficult to understand, maintain, and improve upon later.
In the end it's always a series of trade-offs, so whether you can "improve" this code depends entirely on what you want to improve.