Copiar y comparar arrays en Java. Conceptos: identidad e igualdad. Ejercicios resueltos ejemplos. (CU00675B)

Resumen: Entrega nº75 del curso "Aprender programación Java desde cero". 
Codificación aprenderaprogramar.com: CU00675B 

 

 

COPIAR ARRAYS Y COMPARAR ARRAYS. IDENTIDAD E IGUALDAD

Al trabajar con arrays de tipos primitivos o de objetos se nos puede plantear la necesidad de copiar arrays. La copia de arrays está permitida pero conviene ser cauto cuando realicemos procesos de este tipo. Recordar que un array es un objeto (aunque sea especial) y por tanto la variable que lo nombra en realidad contiene un puntero al objeto, no el objeto en sí mismo.

 

 

Al hacer una operación del tipo array1 = array2, el puntero de array1 apunta al mismo objeto que array2 mientras que el objeto al que apuntaba array1 queda inaccesible. A partir de ese momento existe identidad entre los arrays y la comparación usando == nos devolverá true. A través de código, vamos a plantearnos distintas situaciones y a comentar cuáles son los resultados.

 

 

EJERCICIO EJEMPLO RESUELTO 1. COPIAR ESTABLECIENDO UNA RELACIÓN DE IDENTIDAD ENTRE ARRAYS (aplicable a arrays de tipos primitivos y a arrays de objetos)

//Test de copia de arrays aprenderaprogramar.com

public class TestCopiaArrays {

    public static void main (String [ ] Args) {

        int [ ] miArray1 = {2, -4, 3, -7};

        for (int i=0; i<miArray1.length; i++) {

            System.out.print ("miArray1[" + i +"]= " + miArray1[i]+"; ");

        }

        System.out.println("");

        int [ ] otroArray = {1, 2, 4, 8};

        for (int i=0; i<otroArray.length; i++) {

            System.out.print ("otroArray[" + i +"]= " + otroArray[i]+"; ");}

        System.out.println("");

        System.out.println ("¿Son el mismo objeto? ... " + (miArray1==otroArray) );

        System.out.println("");

        otroArray = miArray1;   //otroArray pasa a ser el mismo objeto que miArray1

        for (int i=0; i<otroArray.length; i++) {

            System.out.print ("otroArray[" + i +"]= " + otroArray[i]+"; ");}

        System.out.println("");

        System.out.println ("¿Son el mismo objeto? ... " + (miArray1==otroArray) );

    } //Cierre del main

} //Cierre de la clase

 

 

Trata de predecir tú mismo el resultado y compáralo con el que ofrecemos. Resultado:

miArray1[0]= 2; miArray1[1]= -4; miArray1[2]= 3; miArray1[3]= -7;

otroArray[0]= 1; otroArray[1]= 2; otroArray[2]= 4; otroArray[3]= 8;

¿Son el mismo objeto? ... false

otroArray[0]= 2; otroArray[1]= -4; otroArray[2]= 3; otroArray[3]= -7;

¿Son el mismo objeto? ... true

 

 

EJERCICIO EJEMPLO RESUELTO 2. INTENTO DE COMPARAR ARRAYS (RELACIÓN DE IGUALDAD)

Supongamos que queremos comparar la igualdad entre dos arrays. Una idea (mala idea) podría ser aplicar el método equals directamente sobre el array. Un código de prueba podría ser este:

//Test uso incorrecto de equals aprenderaprogramar.com

public class TestUsoIncorrectoEquals {

    public static void main (String [ ] Args) {

        int [ ] miArray1 = {2, -4, 3, -7};

        for (int i=0; i < miArray1.length; i++) {

            System.out.print ("miArray1[" + i +"]= " + miArray1[i]+"; ");

        }

             System.out.println();

        int [ ] otroArray = {2, -4, 3, -7};

        for (int i=0; i < otroArray.length; i++) {

            System.out.print ("otroArray[" + i +"]= " + otroArray[i]+"; ");

        }

 System.out.println ("¿Son el mismo objeto? ... " + (miArray1==otroArray) );

 System.out.println ("¿Tienen el mismo contenido (relación de igualdad)? ... " + (miArray1.equals(otroArray) ) );

 otroArray = miArray1;   //otroArray pasa a ser el mismo objeto que miArray1

        for (int i=0; i<otroArray.length; i++) {  System.out.print ("otroArray[" + i +"]= " + otroArray[i]+"; ");  }

System.out.println ("¿Son el mismo objeto? ... " + (miArray1==otroArray) );

        System.out.println ("¿Tienen el mismo contenido (relación de igualdad)? ... " + (miArray1.equals(otroArray) ) );

    } //Cierre del main

} //Cierre de la clase

 

 

Trata de predecir tú mismo el resultado y compáralo con el que ofrecemos. Resultado:

miArray1[0]= 2; miArray1[1]= -4; miArray1[2]= 3; miArray1[3]= -7;

otroArray[0]= 2; otroArray[1]= -4; otroArray[2]= 3; otroArray[3]= -7; ¿Son el mismo objeto? ... false

¿Tienen el mismo contenido (relación de igualdad)? ... false

otroArray[0]= 2; otroArray[1]= -4; otroArray[2]= 3; otroArray[3]= -7; ¿Son el mismo objeto? ... true

¿Tienen el mismo contenido (relación de igualdad)? ... true

 

 

Con este ejemplo comprobamos que el método equals aplicado directamente sobre arrays no funciona ya que en el primer caso teniendo el mismo contenido nos dice que la relación de igualdad es falsa. ¿Por qué? Porque ya dijimos en su momento que los arrays son unos objetos especiales que no tienen una clase que los implemente. Si no tienen clase, no tienen métodos (al menos directamente), y el método que se aplica es el usado por defecto por Java con resultados imprevisibles o no deseados. La solución para comparar arrays es usar otra clase que permite realizar operaciones con arrays. Esta clase es la clase Arrays. Una vez más la terminología Java nos puede inducir a confusión: hablamos de array como colección de tipos primitivos u objetos, y al mismo tiempo Arrays (con mayúsculas) es el nombre de una clase Java que sirve para manipular arrays.

 

 

EJERCICIO

Crea un programa Java donde declares un array de enteros tipo int miArray1 cuyo contenido inicial sea {2, -4, 3, -7}. Muestra su contenido por pantalla. Copia el contenido de este array a un ArrayList denominado lista1 y muestra su contenido por pantalla. ¿Qué tipo de datos almacena el array? ¿Qué tipo de datos almacena el ArrayList?

Puedes comprobar si tu código y respuestas son correctas consultando en los foros aprenderaprogramar.com.

 

  

 

 

 

 

Para acceder a la información general sobre este curso y al listado completo de entregas pulsa en este link:  Ver curso completo.

Para  hacer un comentario o consulta utiliza los foros aprenderaprogramar.com, abiertos a cualquier persona independientemente de su nivel de conocimiento.

¿Puedo yo aprender?

Seas o no del área informática, si quieres aprender a programar te ofrecemos una solución guiada y personalizada: realizar un curso tutorizado on-line. Con este tipo de curso, podrás aprender a programar de forma ágil y amena.

Acceder a detalles y precios de los cursos tutorizados on-line

Política sobre cookies

Utilizamos cookies propias y de terceros para ofrecerte una mejor experiencia y servicio, de acuerdo a tus hábitos de navegación.

Si continúas navegando, consideramos que aceptas su uso. Puedes obtener más información en nuestra Política de Cookies.

En Facebook!

Ahora puedes seguirnos en Facebook. Noticias, novedades y mucho más ¡Te esperamos!

RANKING APR2+

Ranking de lenguajes y entornos de programación aprenderaprogramar.com
 

MAYO - JUNIO 2017

1. Java / J2EE
2. Entornos Oracle
3. Entornos SQL Server
4. .NET, C#
5. JavaScript, jQuery
6. HTML, CSS
7. Php, MySql
8. Android, iOS


Acceder a detalles sobre el ranking de programación aprenderaprogramar.com

FOROS APR2+

Pregunta, responde, consulta, lee, intercambia...

Participa!!! Entra en los foros aprenderaprogramar.com.

             Copyright 2006-2017 aprenderaprogramar.com                La web abierta a cualquier persona interesada en la programación