2010-12-09 26 views
118

¿Cómo puedo verificar si existe un valor escrito en el escáner en una ArrayList?Compruebe si existe un valor en ArrayList

List<CurrentAccount> lista = new ArrayList<CurrentAccount>(); 

CurrentAccount conta1 = new CurrentAccount("Alberto Carlos", 1052); 
CurrentAccount conta2 = new CurrentAccount("Pedro Fonseca", 30); 
CurrentAccount conta3 = new CurrentAccount("Ricardo Vitor", 1534); 
CurrentAccount conta4 = new CurrentAccount("João Lopes", 3135); 

lista.add(conta1); 
lista.add(conta2); 
lista.add(conta3); 
lista.add(conta4); 

Collections.sort(lista); 

System.out.printf("Bank Accounts:" + "%n"); 
Iterator<CurrentAccount> itr = lista.iterator(); 
while (itr.hasNext()) { 
    CurrentAccount element = itr.next(); 
    System.out.printf(element + " " + "%n"); 
} 
System.out.println(); 

Respuesta

221

Solo use ArrayList.contains(desiredElement). Por ejemplo, si usted está buscando para la cuenta de su conta1 ejemplo, se podría utilizar algo como:

if (lista.contains(conta1)) { 
    System.out.println("Account found"); 
} else { 
    System.out.println("Account not found"); 
} 

Editar: Nota que para que esto funcione, tendrá que reemplazar adecuadamente el equals() y hashCode() métodos. Si está utilizando Eclipse IDE, entonces usted puede tener estos métodos generados por la primera apertura del archivo de origen para su objeto CurrentAccount y la selección de Source > Generate hashCode() and equals()...

+7

El método equals() debe anularse en CurrentAccount para determinar cuándo son el mismo objeto – Javi

+1

En ese caso, debe sobrescribirse hashcode(). Por contrato hashcode() los objetos iguales deben tener códigos hash iguales. – zockman

+0

@zockman, seguro que tienes razón, aunque creo que anular iguales es aún más importante en este caso porque si no es así, un objeto CurrentAccount puede no ser el mismo incluso cuando todos sus atributos tengan el mismo valor. Pero sí estoy de acuerdo en reemplazar el código hash() también. – Javi

32

mejor utilizar un HashSet que un ArrayList cuando se está comprobando la existencia de un valor. documentos Java para HashSet dice: "This class offers constant time performance for the basic operations (add, remove, contains and size)"

ArrayList.contains() podría tener que recorrer toda la lista para encontrar la instancia que busca.

8

Hola solo refiérase a mi respuesta en this post es explicar aquí No hay necesidad de iterar la lista simplemente sobrescribir el método igual.

ACTUALIZADO método equels en lugar de ==

@Override 
public boolean equals (Object object) { 
    boolean result = false; 
    if (object == null || object.getClass() != getClass()) { 
     result = false; 
    } else { 
     EmployeeModel employee = (EmployeeModel) object; 
     if (this.name.equals(employee.getName()) && this.designation.equals(employee.getDesignation()) && this.age == employee.getAge()) { 
      result = true; 
     } 
    } 
    return result; 
} 

Llamar:

public static void main(String args[]) { 

    EmployeeModel first = new EmployeeModel("Sameer", "Developer", 25); 
    EmployeeModel second = new EmployeeModel("Jon", "Manager", 30); 
    EmployeeModel third = new EmployeeModel("Priyanka", "Tester", 24); 

    List<EmployeeModel> employeeList = new ArrayList<EmployeeModel>(); 
    employeeList.add(first); 
    employeeList.add(second); 
    employeeList.add(third); 

    EmployeeModel checkUserOne = new EmployeeModel("Sameer", "Developer", 25); 
    System.out.println("Check checkUserOne is in list or not "); 
    System.out.println("Is checkUserOne Preasent = ? "+employeeList.contains(checkUserOne)); 

    EmployeeModel checkUserTwo = new EmployeeModel("Tim", "Tester", 24); 
    System.out.println("Check checkUserTwo is in list or not "); 
    System.out.println("Is checkUserTwo Preasent = ? "+employeeList.contains(checkUserTwo)); 

} 
+2

está usando == para comparar cadenas –

+0

Debe usar equals() en lugar de == para comparar cadenas 'this.name.equals (employee .getName()) ' – Lucky

+0

respuesta actualizada, si esta ayuda, entonces vota :) –

0

Cuando Lista matriz contiene objetos de Tipo de datos primitivo.

Use this function: 
arrayList.contains(value); 

if list contains that value then it will return true else false. 

Cuando la lista de arreglos contiene el objeto de tipo de datos definido por el usuario.

Follow this below Link 

How to compare Objects attributes in an ArrayList?

espero que esta solución le ayudará. Gracias