Buscar un objeto en un array

10/Sep/2020 Java , , , 3 Comentarios
Programación en Java

En Línea de Código hemos visto cómo realizar búsquedas en arrays, implementar búsquedas con diferentes algoritmos y localizar un número en un array. Pero qué sucede si el contenido del array son objetos, ¿cómo podríamos buscar un objeto en un array con Java?

Lo primero será definir nuestro array de objetos Java. Para ello definiremos un objeto sencillo Persona con un nombre y una edad.

public class Persona {
  
  String nombre;
  int edad;
  
  public Persona(){}
  
  public Persona(String nombre,int edad){
    this.nombre = nombre;
    this.edad = edad;
  }
  
  public int getEdad() {
    return edad;
  }
  public void setEdad(int edad) {
    this.edad = edad;
  }
  public String getNombre() {
    return nombre;
  }
  public void setNombre(String nombre) {
    this.nombre = nombre;
  }
  

}

Lo siguiente será crear el array de objetos Persona e añadir varios objetos Persona al mismo.

Persona p0 = new Persona("Victor",42);
Persona p1 = new Persona("Marta",34);
    
Persona[] personas = new Persona[2];
personas[0] = p0;
personas[1] = p1;

Además tenemos que definir un objeto Persona que será el objeto de nuestra búsqueda.

Persona ps = new Persona("Marta",34);

Lo que vamos a definir ahora será un método que realice la búsqueda. Este método searchPerson() recibirá por parámetro el array de Personas y la Persona que queremos buscar.

private static boolean searchPerson(Persona[] personas, Persona p) { ... }

La búsqueda será sencilla ya que lo que haremos es el convertir el array en una lista y utilizar el método .contains() de la lista para ver si contiene el elemento.

private static boolean searchPerson(Persona[] personas, Persona p) {
  return Arrays.asList(personas)
           .contains(p);
}

Hasta aquí parece que está todo controlado. Pero aunque parezca mentira este código no nos va a funcionar. Y esto es debido a que el método .contains() necesita saber cuándo dos elementos son iguales para poder localizar un elemento en la lista.

Para los tipos de datos básicos Java no hay problema ya que sabe cómo comparar dos números enteros o dos cadenas, pero para la clase Persona que hemos definido no lo sabe. Entonces deberemos de decirle cuando dos personas son la misma.

En este caso lo que hacemos es indicar que si el nombre de la persona y su edad es la misma, entendemos que son la misma persona. Esto debemos de indicarlo en un método .equals() dentro de la clase Persona.

El método .equals() tiene la siguiente sintaxis:

public boolean equals (Object p) { ... }

Así que la implementación que realizaremos será la siguiente:

@Override
public boolean equals (Object p) {
  return (this.nombre.equals(((Persona)p).nombre) && this.edad==((Persona)p).edad);		
}

De esta manera cuando se instancien objetos de la clase Persona sabremos cómo compararlos y saber si son iguales. Haciendo que la función 10 sirva y nos ayude a resolver el cómo buscar un objeto en un array.

La clase Persona completa quedará de la siguiente manera:

public class Persona {
  
  String nombre;
  int edad;
  
  public Persona(){}
  
  public Persona(String nombre,int edad){
    this.nombre = nombre;
    this.edad = edad;
  }
  
  public int getEdad() {
    return edad;
  }
  public void setEdad(int edad) {
    this.edad = edad;
  }
  public String getNombre() {
    return nombre;
  }
  public void setNombre(String nombre) {
    this.nombre = nombre;
  }

  @Override
  public boolean equals (Object p) {
    return (this.nombre.equals(((Persona)p).nombre) && this.edad==((Persona)p).edad);
  }
  
}

Vídeos sobre Java


3 comentarios en “Buscar un objeto en un array”

Víctor Cuervo

manuel

quiero saber como hago para poder ver si un arreglo tiene dos elementos igual a 100, necesito ayuda urgente…

Víctor Cuervo

carlos

.contains(ola)

 

Víctor Cuervo

Manuel

Como configuro un script para digital mach de la página binary.com desdes ya muchas gracias !!

¿Algo que nos quieras comentar?

Déjanos tu comentario, no te preocupes que tu email no será publicado

*

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.