2010-12-09 5 views
118

Comment puis-je vérifier si une valeur écrite dans le scanner existe dans une ArrayList?Vérifiez si une valeur existe dans 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(); 

Répondre

221

Utilisez simplement ArrayList.contains(desiredElement). Par exemple, si vous êtes à la recherche pour le compte de conta1 de votre exemple, vous pouvez utiliser quelque chose comme:

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

Edit: Notez que pour que cela fonctionne, vous devrez remplacer correctement la Méthodes equals() et hashCode(). Si vous utilisez IDE Eclipse, vous pouvez avoir ces méthodes générées par la première ouverture du fichier source pour votre objet CurrentAccount et la sélection Source > Generate hashCode() and equals()...

+7

méthode equals() doit être substituée dans CurrentAccount pour déterminer quand ils sont le même objet – Javi

+1

Dans ce cas, hashcode() doit également être remplacé. Per hashcode() Les objets égaux de contrat doivent avoir des hashcodes égaux. – zockman

+0

@zockman bien sûr que vous avez raison, même si je pense qu'équivalences égales est encore plus important dans ce cas car sinon un objet CurrentAccount peut ne pas être identique même si tous leurs attributs ont la même valeur. Mais je suis d'accord pour surcharger hashcode() aussi. – Javi

32

Mieux vaut utiliser un HashSet qu'un ArrayList lorsque vous vérifiez l'existence d'une valeur. Java docs pour HashSet dit: "This class offers constant time performance for the basic operations (add, remove, contains and size)"

ArrayList.contains() pourrait avoir à parcourir toute la liste pour trouver l'instance que vous recherchez.

8

Bonjour, référez-vous ma réponse sur this post est expliquer ici Il n'est pas nécessaire d'itérer la liste juste écraser la méthode égale.

méthode de equels MISE À JOUR au lieu 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; 
} 

Appel:

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

vous utilisez == pour comparer les chaînes –

+0

Vous devez utiliser equals() au lieu de == pour comparer les chaînes 'this.name.equals (employé .getName()) ' – Lucky

+0

mise à jour réponse, Si cette aide puis upvote :) –

0

Lorsque Array List contient des objets primitifs DataType.

Use this function: 
arrayList.contains(value); 

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

Lorsque la liste de tableaux contient un objet de type de données défini par l'utilisateur.

Follow this below Link 

How to compare Objects attributes in an ArrayList?

J'espère que cette solution vous aidera. Merci

Questions connexes