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

Langage Java Discussion :

Vector déconseillé -> avec quoi utiliser DefaultTableModel (par exemple) ?


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre chevronné Avatar de schniouf
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2003
    Messages : 382
    Par défaut Vector déconseillé -> avec quoi utiliser DefaultTableModel (par exemple) ?
    Comme dit dans le titre, l'utilisation de Vector est déconseillée.

    Manque de bol, je développe une appli avec plein de tableModel basés sur... des Vector ! Je sais qu'on peut utiliser des tableaux, mais c'est vraiment pas pratique.

    Quelqu'un aurait il donc une alternative avec des ArrayList ou qqchose dans le genre ?

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

    Informations forums :
    Inscription : Août 2006
    Messages : 3 277
    Par défaut
    Un Arraylist est l'équivalent d'un Vector, sauf que l'ArrayList n'est pas
    Thread safe.
    Tu peux donc remplacer tes Vector facilement.

  3. #3
    Membre chevronné Avatar de schniouf
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2003
    Messages : 382
    Par défaut
    Citation Envoyé par fr1man
    Un Arraylist est l'équivalent d'un Vector, sauf que l'ArrayList n'est pas
    Thread safe.
    Tu peux donc remplacer tes Vector facilement.
    On s'est pas bien compris... les contructeurs de Model prennent généralement en paramètre des Vector et leur contenu est généralement des Vector (voir http://java.sun.com/j2se/1.4.2/docs/...ableModel.html). C'est de ça que je parle.

    Je suis donc obligé de faire new DefaultTableModel( monVectorData, monVectorColumnNames ) et vu que les Vector sont déconseillés, ben voilà quoi...

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

    Informations forums :
    Inscription : Août 2006
    Messages : 3 277
    Par défaut
    Disons que dans mon cas, je me crée mon propre Model qui utilise une
    ArrayList.

  5. #5
    Membre chevronné Avatar de schniouf
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2003
    Messages : 382
    Par défaut
    Citation Envoyé par fr1man
    Disons que dans mon cas, je me crée mon propre Model qui utilise une
    ArrayList.
    OK. Jvoulais savoir si il existait pas un truc déjà tout fait.

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    504
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 504
    Par défaut
    salut,
    moi quand j'utilise des tableaux en général je crée une classe héritant de DefaultTableModel, je lui passe une liste de données
    et dans cette classe je redéfinis les méthodes getValueAt, getColumName, getClass.... je n'ai pas mon code sous les yeux mais c'est ca.
    en fait la liste que tu passe en paramètre par exemple au constructeur de ta nouvelle classe c'est une liste d'objet User, donc pour un getValueAt(column, row) tu fais par exemple User user = list.get(row);
    if (colum == NOM)
    return user.getNom();
    else if ....

    et ton NOM est un define correspondant au numéro de la colone.

    la méthode getClass je crois renvoi elle la classe que contiendra ta cellule ou ta colonne, cela lui permet de préparer l'editor de ta cellule...
    voila mais ya pas mal de tutorials sur ca.... je crois

    bon courage

    sinon tu peux remarquer que si chaque tableau est différent tu aura une classe pour chaque tableModel correspondant....

  7. #7
    Membre chevronné Avatar de schniouf
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2003
    Messages : 382
    Par défaut
    C'est bon en fait, je me suis fait mon propre model pour JTable basé sur des ArrayList.
    Je le partage en pièce jointe, dites moi si y'a des bugs
    Fichiers attachés Fichiers attachés

  8. #8
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 713
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 713
    Par défaut Bien d'accord avec schniouf
    J'ai eu exactement la même réflexion sur : Vector + tableModel.
    Je veux bien me passer de Vector pour un ArrayList mais quelqu'un peut-il m'expliquer pourquoi il faut abandonner la classe Vector ? Est-elle :
    - pas fiable ?
    - pas pratique ?
    - politiquement incorrecte ?
    - bourrée d'amiante ?
    Labor improbus omnia vincit un travail acharné vient à bout de tout - Ambroise Paré (1510-1590)

    Consulter sans modération la FAQ ainsi que les bons ouvrages : http://jmdoudoux.developpez.com/cours/developpons/java/

  9. #9
    Membre éprouvé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    94
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 94
    Par défaut
    Tu aurais pu bosser avec un ArrayList et faire un 'toArray()' au moment de passer ton ArrayList au constructeur.

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

    La classe Vector n'est pas déconseillé !!! Il faut juste lui préféré ArrayList lorsque c'est possible...

    Vector et ArrayList ont une implémentation très proche (basé sur l'utilisation d'un tableau en interne), et il y a principalement deux "différences" entre les deux :
    • Vector existait avant l'apparition de l'API de Collection, elle possédait ainsi ses propres méthodes et a été adaptée afin de respecter les interfaces de cette nouvelle API (Collection et List). Du coup elle possède quelques méthodes en doublons (comme addElement() et add() ou elementAt() et get()) qui la rendent plus complexe...
    • Vector est thread-safe. C'est à dire que ses méthodes sont synchronizées et que la classe peut être utilisé depuis différents thread sans poser de problème. Or avec l'API de Collection, les différentes implémentations ne sont pas thread-safe par défaut (pour de meilleures performances en mono-thread, même si les différences sont minime), mais peuvent le devenir via les méthode synchronizedCollection() de la classe Collections. Du coup Vector sort un peu de cette logique...
    C'est pour cela qu'il faut en général lui préférer la classe ArrayList... Toutefois Vector n'est pas déconseillé car elle est encore énormément utilisé (en particulier dans Swing), et ce n'est pas la peine de se triturer l'esprit pour éviter de l'utiliser...

    Dans ce cas précis il vaut largement mieux utiliser un Vector avec un DefaultTableModel plutôt que de se réécrire sa propre implémentation de TableModel (au passage la méthode setValueAt() est incorrecte car elle ne renseigne pas ses listeners).

    a++

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

Discussions similaires

  1. afficher le % d'utilisation cpu par un processus avec un script
    Par tintin3158 dans le forum Shell et commandes GNU
    Réponses: 7
    Dernier message: 26/02/2014, 13h30
  2. Réponses: 6
    Dernier message: 01/12/2013, 15h35
  3. Problème avec l'utilisation d'une list versus un vector
    Par homeostasie dans le forum Langage
    Réponses: 4
    Dernier message: 02/11/2011, 12h17
  4. Réponses: 10
    Dernier message: 07/08/2010, 17h54
  5. Réponses: 4
    Dernier message: 24/09/2009, 13h38

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