Na verdade UMA pode não parecer muito, mas de grão em grão… vai-se muita memoria. Soma-se um hashmap aqui, outro alí, mais um XMl do Struts, mais um Hibernate, Session, e logo tu vai ter um monte desses pedacinhos que somados vão consumir.
Obvio que isso tudo é uma sugestão minha, que trabalho há alguns anos com projetos onde é necessário cuidar a performance. Sempre que possível simplificar e reduzir coisas que ficam em memória.
Nesse caso você além de ter um Map em memória, vai ter que percorrer ele sempre que precisar pegar o objeto (assim que funciona a implementação interna dele). No outro caso você apenas percorre um array de objetos. Abaixo a implementação que faz a mesma coisa.
Entry tab[] = table;
int hash = key.hashCode();
int index = (hash & 0x7FFFFFFF) % tab.length;
for (Entry<K,V> e = tab[index] ; e != null ; e = e.next) {
if ((e.hash == hash) && e.key.equals(key)) {
return e.value;
}
}
Mas a escolha é sua, dependendo das tuas necessidades.