IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Collection et Stream Java Discussion :

[Liste] Savoir si un élément est présent dans une liste


Sujet :

Collection et Stream Java

  1. #1
    Membre habitué Avatar de Wookai
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2004
    Messages
    307
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2004
    Messages : 307
    Points : 180
    Points
    180
    Par défaut [Liste] Savoir si un élément est présent dans une liste
    Bonjour !

    Je stocke des Peers dans une liste pour un programme de Peer to Peer. Ces Peers ont une IP qui les différencient, ainsi que plusieurs autres infos (nb de fichiers, taille totale, etc...). Je les stocke tous dans une ArrayList, et j'aimerais savoir s'il existe un moyen facile de savoir si la liste contient déjà un peer, d'y accéder et de le supprimer, le cas échéant.

    Il y a bien les méthodes contains, get, et remove, mais ça ne semble pas marcher. J'aimerais que le points de comparaison soit l'IP des peers. Faut-il que je définise une méthode equals ou compareTo ? Est-ce que la liste va utiliser ces méthodes pour savoir si l'objet est présent ? Y a-t-il un autre moyen plus simple ?

    Merci !
    Wookai


  2. #2
    Membre régulier Avatar de jiraiya
    Inscrit en
    Mai 2002
    Messages
    100
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 100
    Points : 116
    Points
    116
    Par défaut
    si tu as une liste, pour faire une recherche, il faut que tu parcours ta liste du récupère l'élément de la liste et tu compares l'adresse ip.

  3. #3
    Membre expérimenté
    Avatar de viena
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    1 071
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Juillet 2002
    Messages : 1 071
    Points : 1 512
    Points
    1 512
    Par défaut
    dans une arraylist, tu as la possibilité de définir une clé pour chaque element.
    Je pense que pour que la méthode contains soit cohérente, il faut définir cette clé et utiliser contains avec. Il faudrait vérifier, mais ca vaudrait le coup d'essayer.
    Cours et tutoriels pour apprendre Java , FAQ Java, et Forum Java
    "La liberté de tout être s'arréte là où commence celle de l'autre... Respecter l'autre, c'est préserver sa liberté d'être, de penser et de vivre"

  4. #4
    Membre habitué Avatar de Wookai
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2004
    Messages
    307
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2004
    Messages : 307
    Points : 180
    Points
    180
    Par défaut
    ça serait cool cette histoire de clés, mais il ne me semble pas qu'il y ait qqch du genre dans les arraylist...
    Wookai


  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    429
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 429
    Points : 475
    Points
    475
    Par défaut
    Autre solution : redéfinir equals (en ne le faisant comparer que les adresse IP)... à condition toutefois que tu n'aies pas besoin d'un vrai "equals" ailleurs !

    Nicolas

  6. #6
    Nouveau membre du Club Avatar de jool
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    76
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2004
    Messages : 76
    Points : 37
    Points
    37
    Par défaut
    je comprends pas ta difficulté...
    tu souhaites juste comparer un tableau d'objets Peer avec un objet Peer?
    et tester si un Peer avec la même IP existe deja dans ce tableau?

  7. #7
    Membre habitué Avatar de Wookai
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2004
    Messages
    307
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2004
    Messages : 307
    Points : 180
    Points
    180
    Par défaut
    C'est ça... J'ai déjà redéfini la méthode equals pour qu'elle compare les IPs... Donc pour l'instant je parcours la List des peers avec un Iterator et je fais un equals à chaque fois...

    Mais c'est pas vraiment performant !
    Wookai


  8. #8
    Membre régulier Avatar de jiraiya
    Inscrit en
    Mai 2002
    Messages
    100
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 100
    Points : 116
    Points
    116
    Par défaut
    si tu ne trouves pas ça performant utilise une HashTable et tu mets comme clef l'adresse ip.

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    429
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 429
    Points : 475
    Points
    475
    Par défaut
    Je ne comprends plus.

    - Si tu choisis de balayer la liste, pas la peine de surcharger equals : il suffi de comparer les champs IP avec ==

    - Si tu as redéfinis equals, contains et remove ne fonctionnent pas tous seuls ?

    Nicolas

  10. #10
    Nouveau membre du Club Avatar de jool
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    76
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2004
    Messages : 76
    Points : 37
    Points
    37
    Par défaut
    pareil que nicolas
    pourquoi tu compares pas tout simplement tes champs IP en parcourant ton ArrayList?
    ton IP je suppose que c'est un String
    donc tu fais un

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (Peer)monArrayList.getElement(i).getIP().compareTo(monPeercomparé)
    il me semble que ca doit marcher...

  11. #11
    Membre habitué Avatar de Wookai
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2004
    Messages
    307
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2004
    Messages : 307
    Points : 180
    Points
    180
    Par défaut
    Oui oui, ça marche de parcourir la liste et de comparer les éléments un à un ! J'ai surchargé equals pour que ce soit plus simple de faire la comparaison, voilà tout !

    Mais même avec equals redéfini, contains ne fonctionne pas ...

    L'idée de la HashTable me plaît bien, je pense que je vais faire de cette manière ! Merci !
    Wookai


  12. #12
    Membre expérimenté
    Avatar de fabszn
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2002
    Messages
    974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Mars 2002
    Messages : 974
    Points : 1 638
    Points
    1 638
    Par défaut
    Hello,

    Si tu fais que des acces en lecture seule sur ta liste ..
    Je te conseille d'utiliser un objet de type Set
    (http://java.sun.com/j2se/1.4.2/docs/api/index.html)

    c'est le plus efficace et le plus optimisé à mon sens...

    Il faut que tu redefinisses les methodes equals et hashCode de la classe Peer

    Ensuite tu utilises la methode contains() de l'objet Set.. et sa marche très bien!
    @+

    Fabszn
    Twitter : @fsznajderman

    N'oubliez pas le bouton
    Comment bien poser ses questions sur le forum


+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Condition si un élément est déjà dans une liste
    Par biohazard401 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 13/06/2015, 00h55
  2. Réponses: 6
    Dernier message: 07/03/2013, 13h43
  3. [Débutant] Savoir si un champs est présent dans une structure
    Par bibou1234 dans le forum MATLAB
    Réponses: 1
    Dernier message: 25/10/2011, 10h49
  4. Réponses: 2
    Dernier message: 13/08/2006, 23h56
  5. Nomer une liste a partir d'un nom pris dans une liste
    Par leau2001 dans le forum Général Python
    Réponses: 2
    Dernier message: 22/05/2006, 11h51

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo