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

AWT/Swing Java Discussion :

Vector ou arrayList?


Sujet :

AWT/Swing Java

  1. #1
    Membre éclairé Avatar de donnadieujulien
    Développeur informatique
    Inscrit en
    Avril 2008
    Messages
    433
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2008
    Messages : 433
    Par défaut Vector ou arrayList?
    bonsoir,

    on m'a déjà dit sur ce forum qu'il faalit plutôt utiliser des arraylist à des vectors en monothreadé.
    Est-ce vraiment le cas et pourquoi?
    J'ai déjà eu des problèmes de stabilité en utilisant un vecteur rempli et vidé beacoup de fois, mais toujours dans un jprogressbar en utilisant un thread pour l'affichage. donc c'est plus du monothréadé non?

  2. #2
    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
    TOUJOURS ArrayList

    Vector date de l'ancienne API de collections, tout comme Hashtable.
    À partir de Java 1.2, ils ont été remplacés (par ArrayList et HashMap)!

    Après le problème monothreadé/multithreadé, c'est un autre problème :
    monothreadé : new ArrayList();
    multithreadé : Collections.synchronizedList(new ArrayList()); (ou gestion manuelle de la synchro, c'est souvent ce dont on a besoin)

  3. #3
    Rédacteur

    Avatar de millie
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    7 015
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 015
    Par défaut
    Vector n'est pas déprécié et est gardé pour raisons de compatibilités mais n'est plus à utiliser (je plussoie Rom sur ce qu'il a dit)

    Je cite Sun :

    Par exemple ici :
    http://java.sun.com/developer/online...ndStackClasses
    Ou ici : http://java.sun.com/developer/TechTi...0216.html#tip2

    Ici http://java.sun.com/j2se/1.4.2/docs/...reference.html ils disent que Vector est une vieille collection.

    Pas mal de discussions sur le forum de Sun disent la même chose : http://forum.java.sun.com/thread.jsp...1981&tstart=30


    Ou encore ici : http://java.sun.com/developer/techni...ing/index.html

    A collection is a group of related data elements, organized into a single object,
    with operations provided to manipulate the data. Java technology has always offered support for collections,
    for example via the Vector and Hashtable classes, but in JDK 1.2, a new framework for collections
    has been defined and implemented. The old classes can still be used, but the new preferred approach
    has significant advantages
    .
    Je peux citer d'autres liens, il suffit de taper : ArrayList et Vector sur java.sun.com

  4. #4
    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,

    +1


    Les seuls cas où tu dois encore utiliser Vector, c'est lorsque tu utilises une API qui l'utilise encore (comme certains composants Swing par exemple).


    Mais tes problèmes de stabilité de viennent pas de Vector...

    a++

  5. #5
    Membre éclairé Avatar de donnadieujulien
    Développeur informatique
    Inscrit en
    Avril 2008
    Messages
    433
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2008
    Messages : 433
    Par défaut Vous me perdez!!
    ok donc pour de meilleures perfs, il faut utiliser arraylist.

    Mais pour le déclarer, c'est quoi cette gestion de la syncro??

    Si j'utilise un arraylist dans une classe jdialog et que dans cette classe j'utilise un thread pour rafraichir ma progressbar, il faut que je le déclare comme ca?

    Je cite @om :

    multithreadé : Collections.synchronizedList(new ArrayList()); (ou gestion manuelle de la synchro, c'est souvent ce dont on a besoin)

    Pourtant ca marche bien en new ArrayList() dans mon prog...

  6. #6
    Membre très actif Avatar de unknow0
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 452
    Par défaut
    si les fonction de l'arrayliste n'ont pas besoin d'etre synchronized juste un new arrayliste et suffisant.
    si il y a besoin d'utiliser des fonction shynchronised il faut utiliser Collections.synchronizedList(new ArrayList());
    enffin si j'ai bien tout compris

  7. #7
    Rédacteur

    Avatar de millie
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    7 015
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 015
    Par défaut
    Citation Envoyé par donnadieujulien Voir le message
    Si j'utilise un arraylist dans une classe jdialog et que dans cette classe j'utilise un thread pour rafraichir ma progressbar, il faut que je le déclare comme ca?
    Ca dépend si ton arrayList peut être utilisé pas plusieurs thread en même temps. Si ça n'arrive jamais, ça ne sert à rien.


    Citation Envoyé par donnadieujulien Voir le message
    Pourtant ca marche bien en new ArrayList() dans mon prog...
    C'est bien le problème des environnements multithreads, ça peut marcher à 90%, 99% sans synchronisation jusqu'au jour où tout déconne.

  8. #8
    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 donnadieujulien Voir le message
    Si j'utilise un arraylist dans une classe jdialog et que dans cette classe j'utilise un thread pour rafraichir ma progressbar, il faut que je le déclare comme ca?
    Règle d'or de Swing : ne jamais rafraîchir l'interface graphique à partir d'un thread autre que l'EDT.

    Donc soit tu utilises un javax.swing.Timer, soit un SwingWorker, soit tu fais toi même les SwingUtilities.invokeLater(...).

    http://gfx.developpez.com/tutoriel/j...ing-threading/

  9. #9
    Membre éclairé Avatar de donnadieujulien
    Développeur informatique
    Inscrit en
    Avril 2008
    Messages
    433
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2008
    Messages : 433
    Par défaut ouais j'ai vu ca
    LA fameuse règle du thread unique.

    Pourtant je remarque que ça marche, et que sur internet, les exemples sont nombreux à rafrachir des progressbar avec un thread....

    pourquoi ca marche alors?

  10. #10
    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
    Parce qu'il faut bien se servir d'un thread pour effectuer les actions en parallèle, mais que pour modifier un élément graphique depuis ce thread tu as une action spécifique à réaliser, qui va mettre la modification dans la file d'attente du Thread chargé du dessin des interfaces graphiques.
    Relis le tuto dont ®om t'as filé le lien, tout y est expliqué

  11. #11
    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 donnadieujulien Voir le message
    LA fameuse règle du thread unique.

    Pourtant je remarque que ça marche, et que sur internet, les exemples sont nombreux à rafrachir des progressbar avec un thread....

    pourquoi ca marche alors?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if(new Random().nextInt(50) == 0) {
        throw new RuntimeException();
    }
    Pourquoi ce code marche si je le lance une seule fois ?

Discussions similaires

  1. classe vector et arrayList implemente une nterface
    Par boobaie dans le forum Interfaces Graphiques en Java
    Réponses: 2
    Dernier message: 24/03/2013, 18h31
  2. Vector Vs ArrayList Vs LinkedList
    Par thierryler dans le forum Collection et Stream
    Réponses: 3
    Dernier message: 29/04/2011, 10h40
  3. Différence entre Vector et ArrayList
    Par menzlitsh dans le forum Collection et Stream
    Réponses: 4
    Dernier message: 29/03/2009, 14h32
  4. Vector ou ArrayList dans un ActionForm ?
    Par TSalm dans le forum Struts 1
    Réponses: 5
    Dernier message: 03/04/2007, 13h41
  5. [Vector et ArrayList] Transformer Enumeration en Object[]
    Par nebule dans le forum Collection et Stream
    Réponses: 6
    Dernier message: 25/09/2006, 16h27

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