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

Langage Java Discussion :

Performances avec des listes d'objets


Sujet :

Langage Java

  1. #1
    Membre régulier
    Profil pro
    Développeur Java
    Inscrit en
    Octobre 2004
    Messages
    201
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Octobre 2004
    Messages : 201
    Points : 96
    Points
    96
    Par défaut Performances avec des listes d'objets
    Bonjour,

    Je me pose une question que je ne prefere pas me poser trop tard:
    J'ai un objets qui contien 3 attributs:
    - un int
    - un String
    - un long
    , et une methode equals qui test si ces 3 valeurs correspondent.

    J'ai cree une ArrayList de ces objets, et regulierement de nouveaux vont y etre ajoutes. Donc avec le temps, car mon programme tourne non stop, elle risque d'etre tres longue.

    En plus de cela, regulierement aussi, je teste si un objet est present ds la liste, avec la methode .contains(obj)

    Donc au bout de X temps, je vais avoir une liste tres grosse et la methode contains qui va rechercher regulierement si un objet est present dedan...

    Ma question est simple au final :
    Est ce qu'une ArrayList est le bon choix a long terme pour ce type de besoin ?

    Merci.

  2. #2
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Si tes objets sont uniques, un Set est plus approrié qu'une List. De plus, le HashSet peut tester plus rapidement l'appatenance au Set en utilisant object.hashcode()

  3. #3
    Membre régulier
    Profil pro
    Développeur Java
    Inscrit en
    Octobre 2004
    Messages
    201
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Octobre 2004
    Messages : 201
    Points : 96
    Points
    96
    Par défaut
    Merci.
    Mes objets sont uniques oui car l'attribut de type "long" est une heure systeme en milisecondes.

    Je vais tester ton set et hashcode() car je suis pas tre familier avec ca

    ++

  4. #4
    Membre régulier
    Profil pro
    Développeur Java
    Inscrit en
    Octobre 2004
    Messages
    201
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Octobre 2004
    Messages : 201
    Points : 96
    Points
    96
    Par défaut
    Ben ca marche impec.
    Jme rend pas trop compte des perf mais bon jfai confiance...

  5. #5
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    La javadoc de hashset explicite, pour chaque méthode, le temps O en fonction de la quantité de donnée. C'est comme çà pour toutes les api de Collection.

  6. #6
    Membre régulier
    Profil pro
    Développeur Java
    Inscrit en
    Octobre 2004
    Messages
    201
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Octobre 2004
    Messages : 201
    Points : 96
    Points
    96
    Par défaut
    Par contre il faut redefinir la methode .equals() et pas la methode .hashcode() ?

    Je pensai que c'etait .hashcode(), mais c'est apres avoir redefinis .equals() que ca marche correctement.

    A quoi sert .hashcode() ?

  7. #7
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    si tu redéfini equals, la javadoc stipule que tu dois redéfinir hashcode pour qu'il corresponde. si a.equals(b); il faut que a.hashcode()==b.hashcode()

    le hashcode est en quelque sorte une signature de ton objet. Il faut que les différentes instances de ton objet répartissent les hashcode le plus homogènement possible pour que les méthode de tri tirant parti du hashcode soient les plus performantes. Dans ton cas, je suggérerai de faire simplement un xor des hashcode des éléments constitutifs de ton equals.

  8. #8
    Membre régulier
    Profil pro
    Développeur Java
    Inscrit en
    Octobre 2004
    Messages
    201
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Octobre 2004
    Messages : 201
    Points : 96
    Points
    96
    Par défaut
    ok merci pour ta reponse.

    J'avoue que sous eclipse, j'ai fait
    click-droit -> source -> generate equals and hashcode
    , et il m'a tout pondu tout fait en utilisant mes attributs.

    Je vais regarder le xor...

  9. #9
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    bah, si le code généré par eclipse est correct

  10. #10
    Membre régulier
    Profil pro
    Développeur Java
    Inscrit en
    Octobre 2004
    Messages
    201
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Octobre 2004
    Messages : 201
    Points : 96
    Points
    96
    Par défaut
    ben c bizarrement foutu mais ca marche bien

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

Discussions similaires

  1. Problème de rendu avec des listes
    Par Erwane dans le forum Scheme
    Réponses: 19
    Dernier message: 03/03/2008, 21h27
  2. Page avec des "List/Menu" liées
    Par Atemi76 dans le forum Dreamweaver
    Réponses: 1
    Dernier message: 16/08/2007, 14h51
  3. Réponses: 7
    Dernier message: 22/09/2006, 15h52
  4. Manipuler des listes d'objet ?
    Par xla99 dans le forum Général Python
    Réponses: 4
    Dernier message: 06/06/2006, 15h06
  5. Problème avec des listes et des variables
    Par Knuckles dans le forum Général Python
    Réponses: 3
    Dernier message: 09/05/2006, 18h24

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