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 synchronisée ça existe ?


Sujet :

Collection et Stream Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2007
    Messages
    46
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2007
    Messages : 46
    Par défaut Liste synchronisée ça existe ?
    Bonjour a tous!

    Je souhaite creer une liste où un nombre indeterminé de thread a accés à cette liste. Les threads peuvent se contenter de lire modifier le contenu.
    J'aimerai savoir si il est possible d'utiliser un package inclu dans java pour m'eviter de recoder une nouvelle liste gerant les priorités entre les threads.
    J'ai entendu parler de java.util.concurrent mais ce que j'ai trouvé c'est une file synchronisé et non une liste ... a moins que je me trompe.

    Quelqu'un a une idée ? D'avance merci

  2. #2
    Membre expérimenté
    Inscrit en
    Juin 2003
    Messages
    292
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 292
    Par défaut
    Vector est une liste ou ses methodes sont synchonized. contrairement aux ArrayList.

  3. #3
    Membre Expert
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 276
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 276
    Par défaut
    Sinon, tu as la méthode statique synchronizedList de la classe Collections.

  4. #4
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2007
    Messages
    46
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2007
    Messages : 46
    Par défaut
    Merci pour ces réponses extremement rapide je dois dire !

    Le probleme avec vector c'est l'allocation memoire , c'est un tableau dynamique si je ne me trompe ? J'ai besoin d'une liste qui subit pas mal de modification.
    C'est pour gerer un serveur multi threadé. La liste sera une liste de client pouvant etre assez imposante. A la rigueur je prefere avoir un temps d'acces minimal et un temps de modification plus long pour l'ajout ou suppréssion de client.

    Pour cette raison lequel des deux choisirez vous ?

    Vector ou synchronizedList?

  5. #5
    Membre expérimenté
    Inscrit en
    Juin 2003
    Messages
    292
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 292
    Par défaut
    Citation Envoyé par loman02
    Le probleme avec vector c'est l'allocation memoire , c'est un tableau dynamique si je ne me trompe ? ?
    ArrayList est aussi un tableau dynamique
    mais tu peux lors de la creation de ton Vector definir sa capacite intial comme ca tu gagneras du temps lors de l ajout, mais tu en perdra un peu si un overflow arrive.
    ton Vector Constructor:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Vector(int initialCapacity, int capacityIncrement)

  6. #6
    Expert confirmé
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    La classe Vector est un Dinosaure hérité des premières version, et n'est pas marquée comme deprecated car bien trop utilisées dans certaines partie de l'API (pour ne pas la citer: Swing).
    De plus elle a du subir quelques rustines afin de pouvoir être compatible avec la spec de la classe Liste quand l'API de Collection a fait son aparition, et les rustines saimal (pardon c'est mal) et çà a tendance à faire chuter les perfs:
    Citation Envoyé par penserenjava
    Les Vectors ne sont pas aussi rapides que les ArrayLists, et doivent être évités ; ils ne sont présents dans la bibliothèque que pour fournir une compatibilité ascendante avec le code existant (la seule raison pour laquelle ils fonctionnent dans ce programme est qu'ils ont été adaptés pour être une List dans Java 2). La meilleure approche est de choisir une ArrayList par défaut, et de changer pour une LinkedList si on découvre des problèmes de performance dûs à de nombreuses insertions et suppressions au milieu de la liste. Bien sûr, si on utilise un ensemble d'éléments de taille fixée, il faut se tourner vers un tableau.
    http://bruce-eckel.developpez.com/li...hap=10&page=10


    En ce qui concerne ton problème: je dirais ArrayList Synchronisée:

    ArrayList car très rapide en accès (tableaux inside) n'importe où dans la liste, plus lent en ajout, insertion ou suppression (tableaux inside...)

    Ou éventuellement un TreeList de jakarta collections qui est plutôt bien équilibrée entre les divers besoin.

    Puis synchronisée car comme dit au dessus les Vector saimal

  7. #7
    Membre Expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Par défaut
    Citation Envoyé par jhaythem
    Vector est une liste ou ses methodes sont synchonized. contrairement aux ArrayList.
    Il vaut mieux utiliser Collections.synchronizedList(new ArrayList<...>());

    Ou alors synchroniser de l'extérieur manuellement, notamment si on a besoin d'une synchronisation globale lors du parcours de la liste...

  8. #8
    Membre expérimenté
    Inscrit en
    Juin 2003
    Messages
    292
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 292
    Par défaut
    Citation Envoyé par ®om
    Il vaut mieux utiliser Collections.synchronizedList(new ArrayList<...>());

    Ou alors synchroniser de l'extérieur manuellement, notamment si on a besoin d'une synchronisation globale lors du parcours de la liste...
    C'est quoi la differance entre synchroniser l'objet et synchroniser ses methodes?

    c est comme le cas du singelton, il vaut mieux synchronisez getInstance() que synchronisez l'object a l interieur du getInsance(). sinon tu ne garantie pas ton singelton.

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 22/05/2011, 14h18
  2. Réponses: 2
    Dernier message: 18/02/2009, 11h49
  3. [deb.]Operateur math. liste d'op. existant
    Par Marc_3 dans le forum C++
    Réponses: 4
    Dernier message: 09/11/2005, 18h30
  4. Existe t'il une liste de commande ??
    Par Lwq dans le forum C++
    Réponses: 5
    Dernier message: 20/10/2005, 13h29
  5. Tester qu'une valeur existe dans une "liste"
    Par Oluha dans le forum Langage
    Réponses: 12
    Dernier message: 04/08/2005, 23h01

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