Intercambio de arrays en Java

Rupam Yadav 12 octubre 2023
  1. Usar Operadores Numéricos para Intercambiar Dos arrays en Java
  2. Utilizar los operadores Bitwise para intercambiar dos arrays en Java
  3. Utilizar Collections.swap() para intercambiar dos elementos de un array en Java
Intercambio de arrays en Java

En este artículo, veremos diferentes enfoques para intercambiar dos arrays en Java. En lugar de utilizar una tercera variable para intercambiar dos arrays, podemos utilizar operadores aritméticos y de bits.

Usar Operadores Numéricos para Intercambiar Dos arrays en Java

Aquí, en el código dado a continuación, tenemos dos arrays, a y b, que contienen valores de tipo int. La longitud de las dos arrays es la misma.

Utilizamos operadores aritméticos para intercambiar a y b. Para la primera iteración, tenemos i igual a 0 y la condición (i<2), de forma que las sentencias aritméticas dentro del bucle se ejecutarán hasta que la condición falle.

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

El programa Math.abs() devuelve el valor absoluto del argumento pasado. Si el argumento no es negativo, devuelve el argumento, y si es negativo, entonces se devuelve la negación del argumento. Esto funcionará de la misma manera para la segunda y tercera iteración.

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);
  }
}

Producción :

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

Utilizar los operadores Bitwise para intercambiar dos arrays en Java

El bitwise XOR o ^ es un operador binario que devuelve bit a bit el XOR de una entrada. Si los bits correspondientes son diferentes, da 1, sino 0. Para la primera iteración tenemos primeraArr[0] = primeraArr[0] ^ segundaArr[0] = 2 ^ 6. La representación binaria de 2 es 0010, y la de 6 es 0110.

El XOR a nivel de bits de 2 y 6 es

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

Por lo tanto, podemos intercambiar los elementos del array utilizando los operadores a nivel de bits.

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]

Utilizar Collections.swap() para intercambiar dos elementos de un array en Java

El método swap() de la clase Collections intercambia los elementos en la posición especificada en la lista especificada. Convertimos nuestro firstArr en una lista utilizando Arrays.asList() y luego lo pasamos al método swap() con las posiciones 0 y 2. Este método intercambia la palabra del índice 0 con la del í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));
  }
}

Producción :

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

Artículo relacionado - Java Array