Troca de arrays em Java

Rupam Yadav 12 outubro 2023
  1. Use operadores numéricos para trocar duas arrays em Java
  2. Use operadores bit a bit para trocar duas arrays em Java
  3. Use Collections.swap() para trocar dois elementos de um array em Java
Troca de arrays em Java

Neste artigo, examinaremos diferentes abordagens para trocar dois arrays em Java. Em vez de usar uma terceira variável para trocar duas arrays, podemos usar operadores aritméticos e bit a bit.

Use operadores numéricos para trocar duas arrays em Java

Aqui, no código fornecido a seguir, temos duas arrays, a e b, que contêm valores do tipo int. O comprimento das duas arrays é o mesmo.

Usamos operadores aritméticos para trocar a e b. Para a primeira iteração, temos i igual a 0 e condição (i<2), de modo que as declarações aritméticas dentro do loop serão executadas até que a condição falhe.

a[0] = a[0] - b[0] = 5 - 4 = 1

    b[0] = a[0] + b[0] = 1 + 4 = 5

    a[0] = GetAbsoluteValue(a[0] - b[0]) = 1 - 5 = GetAbsoluteValue(-4) = 4

Math.abs() retorna o valor absoluto do argumento passado. Se o argumento não for negativo, ele retornará o argumento e, se for negativo, a negação do argumento será retornada. Isso funcionará da mesma maneira para a segunda e a terceira iteração.

import java.util.Arrays;
public class SwapArrayNumeric {
  public static void main(String[] args) throws Exception {
    int[] a = {5, 9};
    int[] b = {4, 3};
    System.out.println("a[] before swapping : " + Arrays.toString(a));
    System.out.println("b[] before swapping : " + Arrays.toString(b));
    for (int i = 0; i < a.length; i++) {
      a[i] = a[i] - b[i];
      b[i] = a[i] + b[i];
      a[i] = GetAbsoluteValue(a[i] - b[i]);
    }
    System.out.println("a[] after swapping : " + Arrays.toString(a));
    System.out.println("b[] after swapping : " + Arrays.toString(b));
  }
  public static int GetAbsoluteValue(int a) {
    return Math.abs(a);
  }
}

Resultado:

a[] before swapping : [ 5, 9 ] b[] before swapping : [ 4, 3 ] a[] after swapping
    : [ 4, 3 ] b[] after swapping : [ 5, 9 ]

Use operadores bit a bit para trocar duas arrays em Java

O bit a bit XOR ou ^ é um operador binário que retorna bit a bit XOR de uma entrada. Se os bits correspondentes forem diferentes, dá 1, senão 0. Para a primeira iteração, temos firstArr[0] = firstArr[0] ^ secondArr[0] = 2 ^ 6. A representação binária de 2 é 0010 e 6 é 0110.

XOR bit a bit de 2 e 6 é

0010 ^ 0110 = 0100 = 4 (in decimal)

firstArr[0] = firstArr[0] ^ secondArr[0] = 2 ^ 6 = 4

secondArr[0] = firstArr[0] ^ secondArr[0] = 4 ^ 6 = 2

firstArr[0] = firstArr[0] ^ secondArr[0] = 4 ^ 2 = 6

Portanto, podemos trocar elementos do array usando os operadores bit a bit.

import java.util.Arrays;

public class SwapArrayBitwise {
  public static void main(String[] args) throws Exception {
    int[] firstArr = {2, 4};
    int[] secondArr = {6, 3};
    System.out.println("firstArr before swapping : " + Arrays.toString(firstArr));
    System.out.println("secondArr before swapping : " + Arrays.toString(secondArr));
    for (int i = 0; i < firstArr.length; i++) {
      firstArr[i] = firstArr[i] ^ secondArr[i];
      secondArr[i] = firstArr[i] ^ secondArr[i];
      firstArr[i] = firstArr[i] ^ secondArr[i];
    }
    System.out.println("firstArr after swapping : " + Arrays.toString(firstArr));
    System.out.println("secondArr after swapping : " + Arrays.toString(secondArr));
  }
}

Resultado:

firstArr before swapping : [2, 4]
secondArr before swapping : [6, 3]
firstArr after swapping : [6, 3]
secondArr after swapping : [2, 4]

Use Collections.swap() para trocar dois elementos de um array em Java

O método swap() da classe Collections troca elementos na posição especificada na lista especificada. Convertemos nosso firstArr em uma lista usando Arrays.asList() e, em seguida, passamos para o método swap() com as posições 0 e 2. Ele troca a palavra no índice 0 pela palavra no índice 2.

import java.util.Collections;
import java.util.List;

public class SwapTwoElements {
  public static void main(String[] args) throws Exception {
    String[] firstArr = {"Hello", "World", "Happy", "Coding"};
    System.out.println("first[] before swapping : " + Arrays.toString(firstArr));
    List<String> a = Arrays.asList(firstArr);
    Collections.swap(a, 0, 2);

    System.out.println("first[] after swapping : " + Arrays.toString(firstArr));
  }
}

Resultado:

first[] before swapping : [Hello, World, Happy, Coding]
first[] after swapping : [Happy, World, Hello, Coding]
Rupam Yadav avatar Rupam Yadav avatar

Rupam Saini is an android developer, who also works sometimes as a web developer., He likes to read books and write about various things.

LinkedIn

Artigo relacionado - Java Array