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 :

Vector et iterator en java


Sujet :

Collection et Stream Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Avril 2009
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 39
    Par défaut Vector et iterator en java
    bonjour,
    j'ai un vector d'un tableau de String, voila la syntaxe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Vector<String[]> vctData = new Vector<String[]>();
    le tableau de String est contient 3 champs: ID, nom, prenom.

    dans une fonction delete, je veux supprimer une ligne (tableau dans mon cas)dans ce vector selon le ID passé en paramètre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    public void deleteI(String clef){
    Iterator<String[]> it = vctData.iterator();
    			while (it.hasNext()) {
    				String id = ((String[]) it.next())[0];
    				if(id.equals(clef)){
    // ici le code de suppression
                                   }
     
    			}
    }
    le problème c'est comment je fais la suppression?
    comment recuperer l'index pour appeler la méthode: vctData.removeElementAt(index); ???

  2. #2
    Membre Expert
    Avatar de hasalex
    Homme Profil pro
    Développeur Java
    Inscrit en
    Janvier 2009
    Messages
    879
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Janvier 2009
    Messages : 879
    Par défaut
    Première remarque :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Vector<String[]> vctData = new Vector<String[]>();
    devrait être remplacé par (sauf dispense justifiée...)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Collection<String[]> vctData = new ArrayList<String[]>();
    Dans une boucle par itérateur, la suppression d'un élément doit se faire avec l'itérateur :


  3. #3
    Membre émérite Avatar de zorm
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    584
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 584
    Par défaut
    Bonjour,

    Pour compléter la réponse donnée, tu trouveras ici une explication concernant le fait de ne pas préférer les Vector.
    Après, utiliser :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Collection<String[]> vctData = new ArrayList<String[]>();
    me semble restrictif dans le choix de l'interface.
    Il me semble qu'il est préférable d'écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    List<String[]> vctData = new ArrayList<String[]>();
    pour que vctData bénéficie bien des méthodes propres aux listes.

    Sinon, d'un point de vue conception, si tu peux assurer que l'Id est unique. Il est surement plus approprié d'utiliser les Map avec comme clé l'ID. Ainsi, on aurait quelque chose de la sorte:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Map<String, String[]> mapData = new HashMap<String, String[]>();

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public void deleteI(String clef){
      mapData.remove(clef);
    }

  4. #4
    Membre averti
    Inscrit en
    Avril 2009
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 39
    Par défaut
    merci bcp, mais pourquoi je vais le remplacer avec:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Collection<String[]> vctData = new ArrayList<String[]>();
    j'ai laisser mon code comme il est, et j'ai ajouté cette ligne et ca marche:

    je signale aussi que je travaille avec JTable et AbstractTableModel.
    j'ajoute une ligne dans le vector et elle s'ajoute dans JTable:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    	public void addRow(String ID, String nom, String prenom) {
     
    			String row[] = { ID, nom, prenom };
     
    			Iterator<String[]> it = vctData.iterator();
    			while (it.hasNext()) {
    				String id = ((String[]) it.next())[0];
    				if(id.equals(ID))
    					return;
    			}
     
    			vctData.addElement(row);
    			fireTableDataChanged();
    		}
    cette fonction est dans une classe qui hérite de AbstractTableModel

    Merci d'avoir m'expliquer les choses.

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

Discussions similaires

  1. parcourt d'un vector avec iterator et boucle for
    Par Benoit_T dans le forum Débuter
    Réponses: 8
    Dernier message: 27/03/2009, 18h42
  2. Utilisation correcte des vectors et iterators
    Par Ange_blond dans le forum SL & STL
    Réponses: 7
    Dernier message: 29/01/2009, 13h46
  3. variable logic:iterate et java scriptlet
    Par nighma dans le forum Struts 1
    Réponses: 6
    Dernier message: 05/07/2007, 14h32
  4. Problème avec Vector et Iterator
    Par boudincweole10 dans le forum Langage
    Réponses: 1
    Dernier message: 08/04/2007, 07h26
  5. [Struts] logic:iterate avec un Vector
    Par laurentb dans le forum Struts 1
    Réponses: 18
    Dernier message: 03/03/2004, 14h42

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