Manipulando array

sei que para criar uma array em java usa-se

int [] meuArray = int[10] // cria um array do tipo inteiro com dez posições

mas como aumentar o tamanho desse array depois ?

como fazer esse array ficar dinamico sem usar a classe ArrayList
???

até onde eu sei não tem como, o que se pode fazer é criar um array maior e migrar os dados. O que é um exercício comum na faculdade.

[quote=paulo.rogeriobr]sei que para criar uma array em java usa-se

int [] meuArray = int[10] // cria um array do tipo inteiro com dez posições

mas como aumentar o tamanho desse array depois ?

como fazer esse array ficar dinamico sem usar a classe ArrayList
???
[/quote]

Na verdade, é assim:

int[] meuArray = new int[10];

E como o digaoneves comentou, não existe essa possibilidade. Se procurar aqui no GUJ mesmo, vai encontrar boas (ao menos uma) implementações desse tipo de necessidade, sem usar nada da Collection. Uma dica é ter um vetor auxiliar para ir modificando o tamanho de acordo com o necessário, mas como já foi citado, isso envolve a migração de dados de um para o outro .

Mas vou ter que cria dois array toda hora que eu inserir um novo elemento?
uma instancia e com por exemplo 10 posições e um novo array?

[quote=nel][quote=paulo.rogeriobr]sei que para criar uma array em java usa-se

int [] meuArray = int[10] // cria um array do tipo inteiro com dez posições

mas como aumentar o tamanho desse array depois ?

como fazer esse array ficar dinamico sem usar a classe ArrayList
???
[/quote]

Na verdade, é assim:

int[] meuArray = new int[10];

E como o digaoneves comentou, não existe essa possibilidade. Se procurar aqui no GUJ mesmo, vai encontrar boas (ao menos uma) implementações desse tipo de necessidade, sem usar nada da Collection. Uma dica é ter um vetor auxiliar para ir modificando o tamanho de acordo com o necessário, mas como já foi citado, isso envolve a migração de dados de um para o outro .[/quote]

Sei que é assim que instancia o array com as posições desejada

Então nao tem jeito sem usar migração de dados e sem Collection ?

public static int[] redim (int[] original, int tamanhoNovo) {
    int[] novoArray = new int[tamanhoNovo];
    System.arraycopy (original, 0, novoArray, 0, Math.min (original.length, novoArray.length));
    return novoArray;
}
....
int[] meuArray = new int[20];
...
meuArray = redim (meuArray, 40);
...

Não. Mas vou te fazer uma pergunta, como você acha que a classe ArrayList faz isso “por baixo dos panos”? 8)

Oi,

O que você pode fazer é instanciar ele novamente com o novo tamanho (salvando a referencia anterior). Ou então usar um array de Objeto Integer[999] e depois de usa-lo remover as posições nulas dentro dele. Ou então fazer como o entanglement disse no post acima.

Baita de um trambique. :twisted:

Tchauzin!

[quote=entanglement] public static int[] redim (int[] original, int tamanhoNovo) { int[] novoArray = new int[tamanhoNovo]; System.arraycopy (original, 0, novoArray, 0, Math.min (original.length, novoArray.length)); return novoArray; } .... int[] meuArray = new int[20]; ... meuArray = redim (meuArray, 40); ... [/quote]

Ok ! obrigado ! Resolvido!!

OBrigado Pessoal ! já entendi ! com o exemplo citado !

Valeu ! muito obrigado :lol:

A classe ArrayList contém um array de Object e um int que contém a quantidade atual de dados. Um ArrayList costuma sempre ter algumas posições vazias. Quando esse array interno fica sem espaço, ele é redimensionado mais ou menos como o código do método “redim” que escrevi acima, mas o tamanho novo é sempre algumas posições a mais, não só uma.