Método Arraycopy da classe do sistema em java

Método Arraycopy da classe do sistema em java
Considere as duas matrizes a seguir: p = 'a', 'b', 'c', 'd', 'e'

e

Q = 'f', 'g', 'h', 'i', 'j'

Se a sub-matriz do índice 2 até o final da matriz P for copiada para a matriz q, começando do índice, 1, então a nova matriz q seria:

'F', 'c', 'd', 'e', ​​'j'

Os elementos 'g', 'h' e 'i' da matriz q foram substituídos. Lembre -se de que a duração de uma matriz não pode ser aumentada nem diminuída após a definição. Então, a substituição tem que ocorrer sob tal cópia. O objetivo aqui não é inserir. O objetivo é copiar. A matriz não é uma estrutura de dados normal para permitir a inserção. Com inserção para estruturas de dados, todos os elementos à direita são deslocados para a direita em muitos lugares. Não se esqueça que quando uma matriz em Java não tem valores práticos, ele tem valores padrão. Em outras palavras, uma matriz vazia diferente de zero tem valores padrão.

A classe do sistema do Java.Lang.* O pacote possui o método Arraycopy (). O objetivo deste método é copiar uma parte de uma matriz em outra matriz. Uma porção pode ser toda a matriz!

Sintaxe

Antes de considerar a sintaxe do método, é bom considerar um programa com o uso do método ArrayCopy (), para o exemplo de cópia acima da matriz. O programa é:

classe pública theClass
public static void main (string [] args)
char [] p = 'a', 'b', 'c', 'd', 'e';
char [] q = 'f', 'g', 'h', 'i', 'j';
Sistema.Arraycopy (P, 2, Q, 1, 3);
Sistema.fora.println (q);

A saída é fcdej, melhor escrito como, f c d e j. A saída é o esperado, embora não seja bem formatado. Observe que o Java.Lang.* O pacote não foi importado. O java.Lang.* O pacote não precisa ser importado pelo programador para qualquer classe, como o sistema, que tem. A sintaxe é:

Public Static Void Arraycopy (objeto SRC, int srcpos, objeto dest, int destpos, Int Length)

O método é estático. Isso significa que a classe do sistema não precisa ser instanciada para usar o método. O primeiro argumento é a matriz da qual os elementos devem ser copiados de. É chamado de fonte e, no caso acima, é a matriz P. O segundo argumento é o índice de início para copiar da fonte. No caso acima, é 2. O terceiro argumento é a matriz para quais elementos devem ser copiados. É chamado de destino e, no caso acima, é a matriz q. O quarto argumento é o índice de início para o recebimento da cópia pela matriz de destino. No caso acima, é 1. O quinto argumento é o número de elementos a serem copiados da matriz de origem, que é o mesmo que o número de elementos a serem substituídos na matriz de destino. A contagem deste número começa com o índice.

Nota: os comprimentos das matrizes de origem e destino não precisam ser iguais.

Incompatibilidade

Uma vez que as implementações das duas matrizes e as declarações Arraycopy () estiverem corretas, o programa será compilado, tudo sendo igual. Se houver alguma incompatibilidade, o programa não será executado e a exceção correspondente será lançada.

Dois dados não do mesmo tipo

Em inglês, o plural de dados é dados. Se um dos matrizes tem chars e o outro tem bytes, o programa ainda será compilado, tudo sendo igual. No entanto, uma ArrayStoreException será emitida em tempo de execução e o programa não será executado. A mensagem de erro de exceção pode ser:

Exceção no tópico "principal" java.Lang.ArrayStoreException: Arraycopy: Type Incatchation: não pode copiar char [] para byte []
em Java.base/java.Lang.Sistema.Arraycopy (método nativo)
em TheClass.Principal (TheClass.Java: 10)

Dois dados não do mesmo tipo

Se um dos matrizes tem chars e o outro tem personagens, o programa ainda será compilado, tudo sendo igual. No entanto, uma ArrayStoreException será emitida em tempo de execução e o programa não será executado. A mensagem de erro de exceção pode ser:

Exceção no tópico "principal" java.Lang.ArrayStoreException: Arraycopy: Type Incatchation: não pode copiar char [] em objeto Array []
em Java.base/java.Lang.Sistema.Arraycopy (método nativo)
em TheClass.Principal (TheClass.Java: 10)

Array de destino muito curto

Se o comprimento (quinto argumento) vá além da matriz de destino, uma ArrayIndexoutOfBoundSexception seria jogada em tempo de execução, e.g.

Exceção no tópico "principal" java.Lang.ArrayIndexoutOfBoundSexception: Arraycopy: Índice de Last Destination 4 Fora dos Limites para Char [3]
em Java.base/java.Lang.Sistema.Arraycopy (método nativo)
em TheClass.Principal (TheClass.Java: 10)

Array de origem muito curta

Se o comprimento (quinto argumento) vá além da matriz de origem, um ArrayIndexoutOfBoundSexception seria jogado em tempo de execução, e.g.

Exceção no tópico "principal" java.Lang.ArrayIndexoutOfBoundSexception: Arraycopy: Índice de Last Source 6 Fora dos Limites para Char [5]
em Java.base/java.Lang.Sistema.Arraycopy (método nativo)
em TheClass.Principal (TheClass.Java: 10)

Array de destino é nulo

A matriz de destino pode ser nula. Por exemplo,

char [] q = nulo;

Nesse caso, uma nullpointerException será jogada pelo sistema.Método Arraycopy (); e.g.

Exceção no tópico "principal" java.Lang.Null Pointer Exception
em Java.base/java.Lang.Sistema.Arraycopy (método nativo)
em TheClass.Principal (TheClass.Java: 10)

Observação,

char [] q = ;

não significa que q é nulo. Isso significa que q está vazio. Com isso, é um ArrayIndexoutOfBoundSexception que será jogado; e.g.

Exceção no tópico "principal" java.Lang.ArrayIndexoutOfBoundSexception: Arraycopy: Índice de Last Destination 4 Fora dos Limites para Char [0]
em Java.base/java.Lang.Sistema.Arraycopy (método nativo)
em TheClass.Principal (TheClass.Java: 10)

Array de origem é nulo

A matriz de origem pode ser nula. Por exemplo,

char [] p = nulo;

Nesse caso, uma nullpointerException será jogada pelo sistema.Método Arraycopy (); e.g.

Exceção no tópico "principal" java.Lang.Null Pointer Exception
em Java.base/java.Lang.Sistema.Arraycopy (método nativo)
em TheClass.Principal (TheClass.Java: 10)

Observação,

char [] p = ;

não significa que P é nulo. Isso significa que P está vazio. Com isso, é um ArrayIndexoutOfBoundSexception que será jogado; e.g.

Exceção no tópico "principal" java.Lang.ArrayIndexoutOfBoundSexception: Arraycopy: Índice de última fonte 5 de limites para char [0]
em Java.base/java.Lang.Sistema.Arraycopy (método nativo)
em TheClass.Principal (TheClass.Java: 10)

Conclusão

A classe do sistema do Java.Lang.* pacote, possui o método Arraycopy (). O objetivo deste método é copiar uma parte de uma matriz em outra matriz. Uma porção pode ser toda a matriz! Este é um método estático, portanto a classe do sistema não precisa ser instanciada para que o método seja usado. O método retorna vazio. A sintaxe para o método é:

Public Static Void Arraycopy (objeto SRC, int srcpos, objeto dest, int destpos, Int Length)