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 :

[Collection][List] Complexite des méthodes.


Sujet :

Collection et Stream Java

  1. #1
    Membre averti

    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 418
    Points : 328
    Points
    328
    Par défaut [Collection][List] Complexite des méthodes.
    Bonjour à tous.

    Après avoir développé une appli, je dois en déterminer la complexité.
    Bien que ce problème tienne de l'algorithmie, les fonctions java utilisées lors du développement influence nécessairement ce calcul.
    J'ai bien trouvé quelques infos là-dessus sur le site de sun, mais pas toutes celles dont j'avais besoin.

    Quelqu'un saurait-il donc me dire quelle complexité ont les méthodes contains(Object), indexOf(Object) dans les classes Vector et ArrayList ?

    Quelle classe est à utiliser de préférence ?

    D'avance merci.
    A+

  2. #2
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,

    Citation Envoyé par marchand_de_sable
    Quelqu'un saurait-il donc me dire quelle complexité ont les méthodes contains(Object), indexOf(Object) dans les classes Vector et ArrayList ?
    Aucune idée...

    Citation Envoyé par marchand_de_sable
    Quelle classe est à utiliser de préférence ?
    Les deux sont implémenté de la même manière, en gérant un tableau d'objet redimensionné au besoin. La principale différence vient du fait que Vector est thread-safe. Mais généralement pour avoir un List thread-safe on passe par la méthode Collections.synchronizedList()...

    Donc en gros il vaut mieux utiliser ArrayList sauf si tu utilises des API qui utilisent encore Vector...

    Plus d'info dans la FAQ : Quelles différences entre ArrayList, LinkedList et Vector ?

    a++

  3. #3
    Membre averti

    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 418
    Points : 328
    Points
    328
    Par défaut
    Merci pour ta réponse.

    J'avais vu les infos concernant les différentes types de List/Collection, et notamment qu'il est recommandé d'utiliser une ArrayList plutôt qu'un Vector. Cependant, il me semble qu'un Vector propose certaines méthodes dont j'ai besoin qui ne sont pas dans ArrayList (enfin, il me semblait l'avoir remarqué, parce que je ne me souviens plus quelles méthodes c'était).

    Je vais continuer à me renseigner. Si quelqu'un a plus d'infos, je suis toujours preneur.
    A+

  4. #4
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par marchand_de_sable
    Cependant, il me semble qu'un Vector propose certaines méthodes dont j'ai besoin qui ne sont pas dans ArrayList (enfin, il me semblait l'avoir remarqué, parce que je ne me souviens plus quelles méthodes c'était).
    Si Vector propose beaucoups plus de méthodes, c'est surtout parce qu'elle provient de Java 1.0, et que l'API de Collections date de Java 1.2. Elle a donc été adapté par la suite pour respecter cette nouvelle API. Elle comporte donc plusieurs méthodes "doublons" tels que add() / addElement() ou remove() / removeElement().

    Elle semblent donc plus complexe et fournit mais ce n'est pas forcément le cas...

    a++

  5. #5
    Membre averti

    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 418
    Points : 328
    Points
    328
    Par défaut
    Je ne m'étais pas laissé avoir par les méthodes doublons

    Mais il me semblait avoir déjà vu des noSuchMethodError avec une ArrayList sur des méthodes présentes dans Vector (autre que les doublons)...
    Mais vu que je ne me souviens pour quoi c'était, et qu'à 1ère vue, les 2 classes sont "équivalentes", quelque chose d'autre à dû m'échapper

    Je vérifierai tout ça quand j'aurais le temps, histoire de ne pas mourir bête...

  6. #6
    Membre éclairé Avatar de g_rare
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    608
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 608
    Points : 683
    Points
    683
    Par défaut
    Citation Envoyé par marchand_de_sable
    Quelqu'un saurait-il donc me dire quelle complexité ont les méthodes contains(Object), indexOf(Object) dans les classes Vector et ArrayList ?
    Après rapide coup d'oeil au code-source des classes ArrayList et Vector : les méthodes "indexOf", et "contains" [qui utilise "indexOf"] sont de complexité O(n).


  7. #7
    Membre averti

    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 418
    Points : 328
    Points
    328
    Par défaut
    Citation Envoyé par g_rare
    complexité O(n).
    Bref, elles parcourent tout le tableau jusqu'à arriver au bon objet, c'est ça ?

    Et en utilisant une autre classe, il n'est pas possible d'optimiser cela ?
    Par exemple en utilisant une liste ordonnée selon les noms des objets ou que sais-je encor ?

    (Désolé, je ne suis pas spécialiste en algorithmie, et je ne connais pas les méthodes de recherches les plus performantes, ni dans quel cadre elles opèrent...)

  8. #8
    Membre émérite
    Avatar de mavina
    Homme Profil pro
    Développeur Java
    Inscrit en
    Octobre 2004
    Messages
    1 812
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Chine

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2004
    Messages : 1 812
    Points : 2 411
    Points
    2 411
    Par défaut
    Citation Envoyé par javadoc
    All of the other operations run in linear time (roughly speaking). The constant factor is low compared to that for the LinkedList implementation.
    En clair, si tu utilises toujours ca, c'est plus rapide d'utiliser LinkedList apparemment

    Fred

  9. #9
    Membre averti

    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 418
    Points : 328
    Points
    328
    Par défaut
    Merci pour vos réponses.

    J'en profite pour poser une question subsidiaire.
    La Javadoc signal que selon l'implémentation, les List (ou Collection ?) peuvent être ordonnées ou non.
    Pour une List ordonnées, doit-on comprendre que ses éléments sont triées ou au contraire laisser dans l'ordre d'insertion ?

  10. #10
    Membre éclairé
    Avatar de bbclone
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    537
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2006
    Messages : 537
    Points : 704
    Points
    704
    Par défaut
    marchand_de_sable> Quelqu'un saurait-il donc me dire quelle complexité ont les méthodes contains(Object), indexOf(Object) dans les classes Vector et ArrayList ?
    g_rare > complexité O(n).

    marchand_de_sable> Bref, elles parcourent tout le tableau jusqu'à arriver au bon objet, c'est ça ?

    marchand_de_sable> Et en utilisant une autre classe, il n'est pas possible d'optimiser cela ?


    c'est normal que c'est du O(n) :-)
    dans une List et un Vector tes elements sont stocker suivant l'ordre d'insertion. il ne sont pas trier
    une recherche dichotomique (tres performante car sont Grand O est de O(log(n) ;-)) ne peut pas fonctionner sur un truc pas trier.

    Si tu est sur que tes elements sont trier, tu peut toujours creer ta propre methode indexOf qui fait une recherche dichotomique par exemple :-)

    Mais le choix de sun dans l'implementation de sa methode indexOf est un peu obliger.

  11. #11
    Membre averti

    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 418
    Points : 328
    Points
    328
    Par défaut
    Je pensais effectivement à une recherche dichotomique sur des éléments ordonnées, je n'en connais pas vraiment d'autre...( ). Mais je me disais que certaines implémentations de List devait déjà faire ça, voir mieux encor !!

  12. #12
    Membre éclairé
    Avatar de bbclone
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    537
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2006
    Messages : 537
    Points : 704
    Points
    704
    Par défaut
    les List (ArrayList, Vector, LinkedList) ne sont pas ordonner! Aucune implementation d'aucune List ne fait par defaut une recherche dichotomique.

    alors soit tu extends une de ces classes et tu fait ta propre methode indexOf comme je te l'ai dit avant. Ca peut etre fait tres facilment avec une petite methode recursive.

    sinon tu peut aussi utiliser la methode Collections.binarySearch

  13. #13
    Membre averti

    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 418
    Points : 328
    Points
    328
    Par défaut
    Citation Envoyé par bbclone
    sinon tu peut aussi utiliser la methode Collections.binarySearch
    lol
    C'est parfait

    On était à 2 doigts de réinventer la roue

    Merci
    ++

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

Discussions similaires

  1. Liste des méthodes d'un EJB côté client
    Par Hirua dans le forum Wildfly/JBoss
    Réponses: 0
    Dernier message: 03/02/2010, 11h09
  2. Où est passé la liste des méthodes disponibles
    Par Micke7 dans le forum Eclipse Java
    Réponses: 3
    Dernier message: 28/10/2008, 14h31
  3. Réponses: 3
    Dernier message: 25/04/2007, 09h45
  4. [VS.net2003][IDE] Exporter la liste des méthodes
    Par arnolem dans le forum Visual Studio
    Réponses: 2
    Dernier message: 01/06/2006, 16h53
  5. Editeur de texte - liste des méthodes
    Par Carlito_superheros dans le forum Langages de programmation
    Réponses: 3
    Dernier message: 30/03/2005, 12h52

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