Podes implementar a tua própria ArrayList
Claro que não será uma classe genérica como em Java 1.5, mas pode ser feito.
O único cuidado extra a ter é com os malloc() e os free(). Mas tirando isso, é uma implementação relativamente simples de se fazer.
Respondendo à questão inicial: os tempos de acesso aumentam drasticamente; para aplicações de alta performance e tempo real não é algo recomendável. Lembra-te que para acederes a um ficheiro, tens que fazer várias chamadas ao sistema operativo; a complexidade deste tipo de operações aumenta drasticamente em relação a acederes a posições de memória. O risco de falhas também.
Mas como solução pó desenrasca serve.
A classe arraylist funciona pelo método de pilha/stack em que se pode adicionar sempre...
Já agora aproveito para te esclarecer. Não funciona como uma pilha. Basicamente, o que acontece é o seguinte:
- É criada uma array estática com tamanho X;
- Quando a array estática está cheia, é criada uma nova array com o dobro do tamanho (2X), os valores são copiados da array antiga para a nova e a antiga é eliminada (derreferenced, no caso do Java).
- Quando a array esvazia para metade, é criada uma array com metade do tamanho, copiados os valores e a array antiga é eliminada.
- A eficiência desta implementação é O(1). Como a cópia é efectuada para N elementos de N em N tempo temos que O(N) para N elementos, ou seja O(N/N) = O(1).
Basicamente é isto.
Cumprimentos.