Essa é uma das coisas que não gosto no Java, a questão de o array não ter o tamanho dinâmico, diferentemente de outras linguagens fortemente tipadas que permitem.
Isso não faz sentido. Primeiro que as tais linguagens "fortemente" tipadas em sua maioria não permitem isso. Na verdade as exceções que existem são linguagens dinamicamente tipadas, e eu acho que queria dizer estaticamente e não fortemente.
O normal é o array ser estático, se ele se torna dinâmico ele deixa de ser um array, estritamente falando. Então a maioria chama de lista ou outra coisa, inclusive porque pode depender da implementação. Até tem linguagens que chama de array dinâmico, mas já não é o array tradicional. Para dar o dinamismo é necessário um uma estrutura de dados diferente ou um algoritmo mais complexo para manipular um array interno, e precisa documentar que a complexidade do algoritmo é diferente de um array.
O nome ArrayList
de Java é criticado por várias pessoas porque pode gerar uma confusão. Não é uma crítica importante, mas não deixa de ter razão.
Duas das linguagens mais populares chamam de apenas array algo que é dinâmico (existem outras que chamam tambpem, mas não vou listar aqui até porque sempre faltará alguma quando sai das principais). PHP e JS, duas das linguagens mais criticadas, justamente por coisas deste tipo, usam outra estrutura de dados mas chama de array. Na documentação de PHP já deixa claro imediatamente que é um mapa (dá para discutor se é o melhor nome) e não um array. Não era assim antes, porque o criador, e mesmo quem veio depois, são péssimos criadores de linguagem, apesar de serem programadores acima da média (que é muito baixa). JS foi criada em 2 meses e tinha o intuito apenas fazer um macaquinho dançar, então nem precisava ser conceitualmente corrta, pena que as pessoas começaram fazer aplicações com ela, mas é um array associativo ou algo semelhante, que não é um array. Não por acaso essas duas linguagens são fracamente tipadas, além de serem dinamicamente tipadas, que hoje todo mundo que entende de computação é um erro para linguagens de mais alto nível que se propõe a fazer aplicações.
Por fim, que importa se o array não é dinâmico, se você tem "array dinâmico" na biblioteca padrão da linguagem, e com outro nome porque ele não é um array puro? Tem críticas muito mais importantes que se faz ao array do Java, por exemplo ele ter problemas de variância.
Em outro mundo o array poderia ser conceituado diferente, mas no que vivemos ele foi definido assim. Preciamos estudar os conceitos corretos para tomar decisões corretas.
Leia mais:
- https://www.tabnews.com.br/maniero/ffcbc887-bf2f-4efa-8f80-f0122f2963dd
- https://pt.stackoverflow.com/q/106719/101
- https://pt.stackoverflow.com/q/429851/101
- https://pt.stackoverflow.com/q/40682/101
- https://pt.stackoverflow.com/q/361149/101
- https://pt.stackoverflow.com/q/21508/101
- https://pt.stackoverflow.com/q/190463/101
S2
Farei algo que muitos pedem para aprender a programar corretamente, gratuitamente (não vendo nada, é retribuição na minha aposentadoria) (links aqui no perfil também).
existe uma diferença entre
memory allocation at compileTime e memory allocation at executionTime
na primeira o s.o. pode oferecer bytes 'contiguos' para a aplicacao