Bueno, la premisa básica es "malo", ya que Java incluida la clase Dictionary desde antes de las interfaces existía en el idioma ...
colecciones ofrecen listas que son algo similar a las matrices, pero ofrecen muchas más cosas que son no. Asumiré que solo hablaste de List (e incluso de Set) y dejas Map fuera de él.
Sí, es posible obtener la misma funcionalidad que List y Set con una matriz, sin embargo, hay mucho trabajo involucrado. El objetivo de una biblioteca es que los usuarios no tengan que "implementar sus propias implementaciones" de cosas comunes.
Una vez que tiene una única implementación que todo el mundo usa, es más fácil justificar el gasto de recursos para optimizarla también. Eso significa que cuando se aceleran las colecciones estándar o se reduce su huella de memoria, todas las aplicaciones que las utilizan obtienen las mejoras de forma gratuita.
Una sola interfaz para cada cosa también simplifica la curva de aprendizaje de todos los desarrolladores: no hay muchas formas diferentes de hacer lo mismo.
Si quisiera tener una matriz que crece con el tiempo, probablemente no ponga el código de crecimiento en todas sus clases, sino que escriba un único método de utilidad para hacerlo. Lo mismo para borrado e inserción, etc. ...
Además, las matrices no son adecuadas para la inserción/eliminación, especialmente cuando se espera que el miembro .length refleje el número real de contenidos, por lo que se gastaría un gran cantidad de tiempo creciendo y reduciendo la matriz. Las matrices tampoco son adecuadas para Sets, ya que tendrías que iterar sobre toda la matriz cada vez que quisieras hacer una inserción para buscar duplicados. Eso mataría cualquier eficiencia percibida.
+1 Definitivamente una mejor respuesta. Eliminé el mío que era torpe. –
@Adeel: Probablemente podría mejorarlo aún más (discusiones sobre cuándo usarlo, Google Collections, etc.), si no estuviera intentando usar el arma más rápida en el oeste. :-P –