java

Invertir arreglo en Java

En este post voy a mostrarte dos maneras de invertir un arreglo (de cualquier tipo) en Java. Los arreglos son colecciones de datos a los que se accede a través de un índice, también son conocidos como arrays.

Invertir arreglo en Java

El primer método es un algoritmo “manual” programado por mí, y el segundo método utiliza un método de la clase Collections. Vamos a ver ambos métodos.

Invertir con Collections

La clase Collections proporciona el método reverse que en realidad invierte una lista (List) pero eso no es problema, ya que podemos convertir el arreglo a una lista con Arrays.asList. Por lo tanto tenemos:

Collections.reverse(Arrays.asList(elArreglo));

Al final del post dejaré un ejemplo completo.

Nota: el método reverse no devuelve un arreglo, sino que lo invierte directamente.

Invertir arreglo con método manual

Este método utiliza un ciclo for e intercambia los valores del arreglo. El primer elemento se intercambia por el último, el segundo por el penúltimo y así sucesivamente.

De esta manera solo usamos una variable extra: una variable temporal para hacer el intercambio.

public static void invertirManual(String[] arreglo) {
    String temporal; // El elemento temporal del arreglo que vamos a intercambiar
    int longitudDeArreglo = arreglo.length;
    // Nota: al dividir entre 2, si es flotante, se pasa al entero anterior. P. ej.
    // 5 / 2 = 2
    for (int x = 0; x < longitudDeArreglo / 2; x++) {
      // Guardar el actual
      temporal = arreglo[x];
      // El índice de la otra mitad
      int indiceContrario = longitudDeArreglo - x - 1;
      // El valor actual es el valor contrario, el de la otra mitad
      arreglo[x] = arreglo[indiceContrario];
      // Y el de la otra mitad, es el que había en el actual originalmente
      arreglo[indiceContrario] = temporal;
    }
    // El arreglo ya está invertido internamente
  }

El ciclo que hacemos va desde 0 hasta la mitad (redondeada hacia abajo) del arreglo. Dentro del mismo hacemos el intercambio y al final de la función no es necesario regresar nada, porque hemos modificado el arreglo directamente y ahora ya está invertido.

Ejemplos para invertir arreglo con Java

A continuación dejo el código completo que demuestra las dos maneras de invertir un arreglo en Java:

/*
  2 maneras de invertir un arreglo en Java
  El primer método invierte un arreglo con un método manual,
  intercambiando los elementos dentro de un ciclo for

  El segundo utiliza un método incluido dentro de Collections

  @author parzibyte
  Visita: parzibyte.me/blog
*/import java.util.*;// Para Collections y Arrays

class Main {
  public static void main(String[] args) {
    // Definir el arreglo original
    String[] lenguajes = { "Java", "JavaScript", "Go", "Kotlin", "C#", "Python", "PHP" };
    // Imprimir el arreglo antes de invertirlo
    System.out.println("\n\n\n=====\nImprimiendo arreglo normal:\n=====");
    for (String lenguaje : lenguajes) {
      System.out.println(lenguaje);
    }
    // Invertir el arreglo con método manual
    invertirManual(lenguajes);
    System.out.println("\n\n\n=====\nImprimiendo arreglo invertido\n=====");
    for (String lenguaje : lenguajes) {
      System.out.println(lenguaje);
    }
    // Invertir el arreglo con métodos de Collections
    // Nota: Collections.reverse invierte una lista, por eso convertimos el arreglo a lista
    Collections.reverse(Arrays.asList(lenguajes));
    System.out.println("\n\n\n=====\nImprimiendo arreglo invertido (debería ser igual al original)\n=====");
    for (String lenguaje : lenguajes) {
      System.out.println(lenguaje);
    }
  }

  public static void invertirManual(String[] arreglo) {
    String temporal; // El elemento temporal del arreglo que vamos a intercambiar
    int longitudDeArreglo = arreglo.length;
    // Nota: al dividir entre 2, si es flotante, se pasa al entero anterior. P. ej.
    // 5 / 2 = 2
    for (int x = 0; x < longitudDeArreglo / 2; x++) {
      // Guardar el actual
      temporal = arreglo[x];
      // El índice de la otra mitad
      int indiceContrario = longitudDeArreglo - x - 1;
      // El valor actual es el valor contrario, el de la otra mitad
      arreglo[x] = arreglo[indiceContrario];
      // Y el de la otra mitad, es el que había en el actual originalmente
      arreglo[indiceContrario] = temporal;
    }
    // El arreglo ya está invertido internamente
  }

}

Conclusión

En los ejemplos vimos cómo invertir un arreglo de cadenas, y para invertir un arreglo de otro tipo solo se necesita declarar la temporal de distinta manera, así como la firma del método; de tal manera que se cambie el tipo de dato.

Estoy aquí para ayudarte 🤝💻


Estoy aquí para ayudarte en todo lo que necesites. Si requieres alguna modificación en lo presentado en este post, deseas asistencia con tu tarea, proyecto o precisas desarrollar un software a medida, no dudes en contactarme. Estoy comprometido a brindarte el apoyo necesario para que logres tus objetivos. Mi correo es parzibyte(arroba)gmail.com, estoy como@parzibyte en Telegram o en mi página de contacto

No te pierdas ninguno de mis posts 🚀🔔

Suscríbete a mi canal de Telegram para recibir una notificación cuando escriba un nuevo tutorial de programación.
parzibyte

Programador freelancer listo para trabajar contigo. Aplicaciones web, móviles y de escritorio. PHP, Java, Go, Python, JavaScript, Kotlin y más :) https://parzibyte.me/blog/software-creado-por-parzibyte/

Entradas recientes

Creador de credenciales web – Aplicación gratuita

Hoy te voy a presentar un creador de credenciales que acabo de programar y que…

4 horas hace

Desplegar PWA creada con Vue 3, Vite y SQLite3 en Apache

Ya te enseñé cómo convertir una aplicación web de Vue 3 en una PWA. Al…

7 días hace

Arquitectura para wasm con Go, Vue 3, Pinia y Vite

En este artículo voy a documentar la arquitectura que yo utilizo al trabajar con WebAssembly…

7 días hace

Vue 3 y Vite: crear PWA (Progressive Web App)

En un artículo anterior te enseñé a crear un PWA. Al final, cualquier aplicación que…

7 días hace

Errores de Comlink y algunas soluciones

Al usar Comlink para trabajar con los workers usando JavaScript me han aparecido algunos errores…

7 días hace

Esperar promesa para inicializar Store de Pinia con Vue 3

En este artículo te voy a enseñar cómo usar un "top level await" esperando a…

7 días hace

Esta web usa cookies.