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 éclairé 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
    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 !

  2. #2
    Membre éprouvé Avatar de jiraiya
    Inscrit en
    Mai 2002
    Messages
    100
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 100
    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 Expert
    Avatar de viena
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    1 071
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Juillet 2002
    Messages : 1 071
    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.

  4. #4
    Membre éclairé 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
    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...

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 429
    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
    Membre confirmé Avatar de jool
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    76
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2004
    Messages : 76
    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 éclairé 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
    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 !

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

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 429
    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
    Membre confirmé Avatar de jool
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    76
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2004
    Messages : 76
    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 éclairé 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
    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 !

  12. #12
    Membre Expert
    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
    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!

+ 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