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

Java Discussion :

FAQ erreur - LinkedList


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau candidat au Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 2
    Par défaut FAQ erreur - LinkedList
    Bonjour à tous,

    Je viens juste de m'inscrire sur le forum pour signaler une erreur dans la FAQ java à propos de java.util.LinkedList .

    Il est marqué : "Complexité : Les opérations size, isEmpty, add, remove, set, get sont exécutées en temps constant" .

    Or l'opération remove n'est pas exécutée en temps constant mais
    en temps linéaire.

    Il est vrai que dans certains langages comme le C, la supression ou la récupération d'un élément
    dans une liste fonctionne en temps constant mais c'est du au fait qu'on
    possède l'adresse de la cellule de la liste.
    L'opération remove de java.util.LinkedList prend en paramètre
    une référence sur l'objet à supprimer mais ne prend
    pas en paramètre la référence de la cellule qui contient l'objet :
    la référence de la cellule n'est pas connue et donc une recherche doit
    être effectuée -> remove est en O(n) .

    Pour la petite histoire, je code habituellement en C et je me met doucement
    à java. C'est pour ça que je regarde la FAQ java pour essayer d'en apprendre
    plus sur le langage.
    Je ne comprenais pas comment la méthode remove proposée dans LinkedList pouvait s'exécuter en temps constant.
    J'ai donc regarder le code source de LinkedList disponible ici
    et découvert qu'elle s'exécutait en fait en temps linéaire.

  2. #2
    Membre Expert Avatar de KiLVaiDeN
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 870
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 870
    Par défaut
    Bonjour,

    Je confirme, tu as tout à fait raison ! La méthode remove(Object o), dont un bout de code est le suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
      241               for (Entry<E> e = header.next; e != header; e = e.next) {
      242                   if (o.equals(e.element)) {
      243                       remove(e);
      244                       return true;
      245                   }
      246               }
    va effectivement nécessiter un parcours complet des éléments... La LinkedList offre cependant des méthodes en O(1) pour enlever le premier élément ou le dernier ( removeFirst, removeLast ). Je pense que dans la FAQ il faut préciser cela, en focalisant sur l'intérêt d'une telle liste qui est de faire une pile.

    Bienvenue sur le forum

Discussions similaires

  1. Contribuez à la FAQ Erreurs et avertissements !
    Par -Nikopol- dans le forum Contribuez
    Réponses: 0
    Dernier message: 01/05/2014, 22h35
  2. [FAQ] Erreur dans la matrice de rotation sur l'axe Y ?
    Par Zouch-K dans le forum Contribuez
    Réponses: 2
    Dernier message: 17/07/2012, 00h33
  3. [Lazarus] FAQ : erreur dans l'article "ajouter une icône" ?
    Par Chin Tao dans le forum Lazarus
    Réponses: 4
    Dernier message: 23/08/2010, 17h23

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