Realocar objetos em nova Array

8 respostas
michael.martins

Caros, tenho uma array de 10 posições, gostaria de quando está estivesse cheia, criar uma nova array de 20 posições e copiar todos os objetos da array anterior para a nova array.

Como faria isso?

Tentei o método newInstance mas não consegui

void adiciona(Funcionario f){
		for (int s = 0; s < this.empregados.length; s++){
			if (this.empregados[s] == null){
				this.empregados[s] = f;
				break;
			} else {
				Funcionario[] empregados2 = new Funcionario[20];
				empregados2[s] = f;
				this.empregados.newInstance(Funcionario(), 20);
			}
		}
	}

Podem me auxiliar? :wink:

8 Respostas

M

/achismo on

Se vc fizer algo tipo:

seuArray = new TipoDeDado[tamanho];

Não funciona?

/achismo off

michael.martins

Não…desta forma ele cria um novo array mas não copia os dados do array anterior…

valeu!!!

M

Hmmm acho que agora entendi, você quer aumentar as posições do array mas quer manter os dados que já existem. é isso?

michael.martins

Na verdade eu quero criar uma nova array maior do que a anterior e copiar os dados da mesma para a nova array.

WendersonLP

esse é um exemplo, mais não precisa pegar todo, pega a lógica que é bem melhor

Class1

public class Class1 {
	
	private int[] array1;
	private int[] array2;
	private int cont;
	
	public Class1() {
		array1 = new int[ 10 ];
		array2 = new int[ 20 ];
		cont = 0;
	}
	
	public void setNumber( int number ) {
		
		if ( cont < array1.length ) {
			array1[ cont ] = number;
			cont++;
		}
		else
			if ( cont < array2.length) {
				if ( cont == 10 ){
					System.out.printf( "Array1\n" );
					for ( int i = 0; i < array1.length; i++ ){
						System.out.printf( "%d, ", array1[ i ] );
					}
					 myClone();
				}
				
				array2[ cont ] = number;
				cont++;
			}
	}
	
	
	public void myClone() {
		
		for ( int i = 0; i < array1.length; i++ )
			array2[ i ] = array1[ i ];
	}
	
	public void arrayMessage() {
		
		if ( cont < 10 ) {
			System.out.printf( "\nArray1\n" );
			for ( int i = 0; i < cont ; i++ ){
				System.out.printf( "%d, ", array1[ i ] );
			}
		}
		else {
			System.out.printf( "\nArray2\n" );
			for ( int i = 0; i < cont; i++ ) {
				System.out.printf( "%d, ", array2[ i ] );
			}
		}
	}
}

class main

import java.util.Random;
 
public class MyArrayNet {
    
    public static void main(String[] args) {
    	
    	Class1 obj1 = new Class1();
    	
    	Random rand = new Random();
    	
    	for ( int i = 0; i < 12; i++ ) {
    		obj1.setNumber( ( rand.nextInt( 10 ) + 1 ) );
    	}
    	
    	obj1.arrayMessage();
    	
    }
}
B

Para que reinvertar a roda?

Por que você não utiliza um ArrayList, que tudo isto já está encapsulado?

Mais se realmente o que você deseja é aumenter o tamanho do array, então segue o exemplo:

Object[] teste = new Object[1];
	teste[0] = new String("A");
	teste = Arrays.copyOf(teste, 3);
	teste[1] = new String("B");
	teste[2] = new String("C");
	for (Object o : teste) {
	    System.out.println(">>> " + o);
	}
B

Existe o System.arraycopy pra fazer cópia de um array para outro.

michael.martins

Ok pessoal valeu!!!

Consegui fazer com o System.arraycopy(array1, indiceArray1, array2, indiceArray2, quantidade);

Obrigado a todos!! :slight_smile:

Criado 31 de maio de 2009
Ultima resposta 1 de jun. de 2009
Respostas 8
Participantes 5