terça-feira, 13 de dezembro de 2011

Arrays

Um array em Java é um lista de tamanho fixo que permite conter objetos similares. O array é criado com um número de elementos fixo e depois disto esta quantidade não pode ser alterada. Cada item do array (chamado elemento do array) pode ser acessado por índice numérico. A numeração deste índice sempre começa em zero. Por exemplo podemos ter as seguintes declarações:
int[] anArrayInteiros;
byte[] anArrayBytes;
short[] anArraShorts;
long[] anArraLongs;
float[] anArrayFloats;
double[] anArrayDoubles;
boolean[] anArrayBooleans;
char[] anArrayChars;
String[] anArrayStrings;


Como vimos nas declarações acima, o tamanho do array não faz parte da declaração do tipo. A quantidade de elementos é definida na chamada a new.

// cria um array para 10 inteiros
int[] arrayDezInteiros = new int[10];

// preenche o array

for(int i = 0, i < 10, i++) 
  arrayDezInteiros[i] = i;

// imprime

for(int i = 0, i < 10, i++) {
  System.out.println("Elemento "+Integer.toString(i+1)+" no índice "+Integer.toString(i)+": "+ anArray[i]);
}

Outra forma de criar esta variável é através da criação e inicialização do array na forma apresentada abaixo:

int[] arrayDezInteiros = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};

O tamanho do array é dado pela quantidade de elementos indicados entre { }.

É possível declarar um array multidimensional utilizando dois ou mais conjuntos de parênteses, como por exemplo para criar uma matriz retangular de 10x2 utilizamos:

int[][] arrayDezPorDoisInteiros = new int[10][2];

Neste caso o acesso aos elementos é feito por um índice compostos como arrayDezPorDoisInteiros[1][0]

Copiando elementos de um array

Podemos copiar os elementos utilizando um método em java.lang.System denominado arraycopy que tem o seguinte formato:
arraycopy(Object src, int srcPos, Object dest, int destPos, int length) 

src - é o array de origem
srcPos - indica a posição inicial (índice) do array de origem de onde começará a cópia
dest - é o array de destino
destPos - indica a posição inicial (índice) do array de destino onde começarão a serem inseridos os dados copiados
length - número de elementos que serão copiados

Este métodos pode gerar 3 tipos de exceção:
  • IndexOutOfBoundsException - qualquer tentativa fora dos limites dos arrays
  • ArrayStoreException - se os tipos forem incompatíveis
  • NullPointerException - se algum dos arrays for nulo

Vamos ver um exemplo:

public class ExemploCopiaArray { 
   
    public static void main(String[] args) {
        int[] intArray = new int[] {1, 2, 3, 4, 5, 6, 7, 8, 9, 0};     

        // declara a cópia do mesmo tamanho
        int[] intCopia = new int[intArray.length]; 

// copia os dados de um para outro        
        System.arraycopy(intArray, 0, intCopia, 0, intArray.length);
        
        for(int i = 0; i < intCopia.length; i++)
            System.out.println(intArray[i] + " = " + intCopia[i]);
    }


}

Nenhum comentário:

Postar um comentário