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 :

[Conception] Pile FIFO


Sujet :

Java

  1. #1
    Membre confirmé Avatar de zoullou
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 130
    Par défaut [Conception] Pile FIFO
    Bonjour,

    Je cherche a réaliser une pile FIFO synchronisé, j'ai regardé ce que proposait l'API, mais je n'ai trouvé que la classe stack qui propose une pile LIFO et non FIFO.
    Existe t-il une classe de l'API qui gere ça ?

    Merci
    A+

  2. #2
    Membre Expert
    Avatar de Hephaistos007
    Profil pro
    Enseignant Chercheur
    Inscrit en
    Décembre 2004
    Messages
    2 493
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 493
    Par défaut Re: Pile FIFO
    Citation Envoyé par zoullou
    Je cherche a réaliser une pile FIFO synchronisé, j'ai regardé ce que proposait l'API, mais je n'ai trouvé que la classe stack qui propose une pile LIFO et non FIFO.
    Une pile est obligatoirement une structure LIFO. Si tu veux une structure FIFO il s'agit de la File.

    Sinon, qu'entends-tu par synchronisé ?
    Il vaut mieux mobiliser son intelligence sur des conneries que mobiliser sa connerie sur des choses intelligentes --- devise SHADOKS

    Kit de survie Android : mon guide pour apprendre à programmer sur Android, mon tutoriel sur les web services et enfin l'outil en ligne pour vous faire gagner du temps - N'oubliez pas de consulter la FAQ Android

  3. #3
    Rédacteur
    Avatar de lunatix
    Homme Profil pro
    Architecte technique
    Inscrit en
    Novembre 2002
    Messages
    1 960
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Architecte technique

    Informations forums :
    Inscription : Novembre 2002
    Messages : 1 960
    Par défaut
    avec linkedList tu as ca ! (getFirst(), getLast(), removeFirst() et removeLast() will do the job)

    pour la synchoniser, suffit de faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     List list = Collections.synchronizedList(new LinkedList(...));
    comme indiqué dans la javadoc

  4. #4
    Membre Expert

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2004
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 301
    Par défaut
    Citation Envoyé par lunatix
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     List list = Collections.synchronizedList(new LinkedList(...));
    ... mais ce qui n'empêche pas de devoir la synchroniser lors des itérations

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    synchronized(list) {
      for(Iterator i=list.iterator(); i.hasNext();) {
        Object o = i.next();
      }
    }

  5. #5
    Expert éminent
    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
    Billets dans le blog
    1
    Par défaut
    Salut,

    Citation Envoyé par lunatix
    avec linkedList tu as ca ! (getFirst(), getLast(), removeFirst() et removeLast() will do the job)
    D'ailleurs avec Java 5.0 cela a été normalisé par l'interface Queue qui est implémenté par LinkedList.

    On dispose ainsi (entre autres) des méthodes offer(E) et poll() qui sont gérer comme une FIFO dans l'implémentation de LinkedList...

    a++

  6. #6
    Membre chevronné Avatar de NeptuS
    Profil pro
    Inscrit en
    Août 2005
    Messages
    392
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2005
    Messages : 392
    Par défaut
    après vérification, il me semble que ce n'est pas l'Interface Queue qui convienne dans le cas cité adiGuba, mais plutôt BlockingQueue : elle est synchronizée

  7. #7
    Gfx
    Gfx est déconnecté
    Expert confirmé
    Avatar de Gfx
    Inscrit en
    Mai 2005
    Messages
    1 770
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 770
    Par défaut
    Non une BlockingQueue fait bien plus que ca. Elle permet par exemple, lorsque tu veux recuperer un element, de faire un appel bloquant tant que la queue est vide. Une Queue est une Collection et peux donc etre synchronisee par un appel a Collections.synchronizedCollection(Collection<T> c).

  8. #8
    Membre éprouvé Avatar de Satch
    Homme Profil pro
    Hypnothérapeute - Magicien
    Inscrit en
    Mars 2004
    Messages
    498
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Suisse

    Informations professionnelles :
    Activité : Hypnothérapeute - Magicien

    Informations forums :
    Inscription : Mars 2004
    Messages : 498
    Par défaut
    Citation Envoyé par lunatix
    avec linkedList tu as ca ! (getFirst(), getLast(), removeFirst() et removeLast() will do the job)

    pour la synchoniser, suffit de faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     List list = Collections.synchronizedList(new LinkedList(...));
    comme indiqué dans la javadoc
    A part que l'interface List n'as pas le getFirst et getLast.
    Il faut la déclarer en LinkedList directement.

  9. #9
    Expert éminent
    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
    Billets dans le blog
    1
    Par défaut
    Une Queue est une Collection et peux donc etre synchronisee par un appel a Collections.synchronizedCollection(Collection<T> c).
    Tiens c'est bizarre qu'il n'existe aucune méthode Collections.synchronizedQueue(Queue<T>) !!!

    Cela pose problème car le type retourné par synchronizedCollection() est bien Collection mais n'implémente pas Queue


    Citation Envoyé par Satch
    A part que l'interface List n'as pas le getFirst et getLast.
    Il faut la déclarer en LinkedList directement.
    Et donc gérer soi-même la synchronisation à chaque utilisation...

    a++

  10. #10
    Gfx
    Gfx est déconnecté
    Expert confirmé
    Avatar de Gfx
    Inscrit en
    Mai 2005
    Messages
    1 770
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 770
    Par défaut
    Ah heu oui en effet Voila a quoi ce mene de parler trop vite, d'autant plus que j'ai utilise la bonne classe la semaine derniere ^^ La reponse est donc d'utiliser une ConcurrentLinkedQueue.

  11. #11
    Membre chevronné Avatar de NeptuS
    Profil pro
    Inscrit en
    Août 2005
    Messages
    392
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2005
    Messages : 392
    Par défaut
    euu .. ben du coup je me suis penché dessus ... et si kk1 pouvait me dire si SynchronousQueue<E> ne conviendrait pas à son cas ....
    Je dis certainement une bêtise .. mais j'aimerai savoir pourquoi svp ..

    D'autant plus qu'elle est bloquante je crois ... sacré avantage ...

  12. #12
    Gfx
    Gfx est déconnecté
    Expert confirmé
    Avatar de Gfx
    Inscrit en
    Mai 2005
    Messages
    1 770
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 770
    Par défaut
    Non Synchronous force un travail synchrone entre deux threads sur la liste. Lis la doc de la classe tu verras.

  13. #13
    Membre chevronné Avatar de NeptuS
    Profil pro
    Inscrit en
    Août 2005
    Messages
    392
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2005
    Messages : 392
    Par défaut
    il m'avait bien semblé qu'elle ne disait pas ce que je voulais savoir .. mais c'est le concept de synchrone entre 2 threads sur la pile que je ne comprends pas :
    Retrieves and removes the head of this queue, if another thread is currently making an element available.
    Vous pouvez éclaircir ce point ?
    ça voudrait dire que le thread d'insertion attend qu'un Thread retire son élément inséré ?

Discussions similaires

  1. héritage pile FiFo Lifo
    Par jockerse dans le forum C++/CLI
    Réponses: 3
    Dernier message: 08/04/2014, 11h43
  2. pile FIFO et memcpy
    Par 44Magnum dans le forum C
    Réponses: 7
    Dernier message: 31/12/2012, 10h16
  3. [MySQL] Pile FIFO avec un Trigger
    Par takoha dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 19/12/2010, 12h15
  4. conception des liste en fonction des piles
    Par sino dans le forum C++Builder
    Réponses: 4
    Dernier message: 15/06/2006, 21h08
  5. [Débutant][Conception] Modéliser une pile d'entiers
    Par philippe123 dans le forum Général Java
    Réponses: 45
    Dernier message: 20/02/2006, 21h42

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