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 :

Arraylsit insertion avec méthode add


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Janvier 2008
    Messages
    139
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 139
    Par défaut Arraylsit insertion avec méthode add
    Bonjour,

    Voila j'ai une array list de "noeud", chaque noeud est identifié par un numéro.
    On accede au numero du noeud par la méthode get_num();

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public ArrayList<Noeud> g= new ArrayList<Noeud>();
    Mais voila mon probleme, lorsque j'insere mes noeuds dans mon array list comme ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    this.g.add((n.get_num()-1),n);
    Mon application main:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
         graf.ajouterNoeud(n1);
    		graf.ajouterNoeud(n2);
    		graf.ajouterNoeud(n4);
    		graf.ajouterNoeud(n5);
    		graf.ajouterNoeud(n3);
    Si je veux ajouter le noeud d'indice 4 avant le noeud d'indice 3 il ne veut pas:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 3, Size: 2
    	at java.util.ArrayList.add(ArrayList.java:368)
    Comment puis-je faire pour inserer des noeuds aux indices de leur numéro sachant que je ne connais pas forcémment la taille de mon arrayList...

    J'ai pensé à les inérerer les uns a la suite des autres et ensuite trier mon arraylist mais ca me semble couteux.

    Quelqu'un à un solution?

    Merci

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Citation Envoyé par G4uthier Voir le message
    J'ai pensé à les inérerer les uns a la suite des autres et ensuite trier mon arraylist mais ca me semble couteux.
    Pas tellement, c'est une solution honnête.

    Mais si tu veux mon avis, ce n'est pas d'une List<Noeud> dont tu as besoin, mais d'une SortedMap<Integer,Noeud>.

    Cela te permet de les insérer dans le désordre, mais l'ordre est maintenu automatiquement dans la map.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    public Map<Integer,Noeud> g= new TreeMap<Integer,Noeud>();
    ...
    g.put(n.get_num(), n);
    ...
    for(Noeud n : g.values()) {
    // Les noeuds arrivent dans l'ordre
    ...
    }
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Rédacteur
    Avatar de CyberChouan
    Homme Profil pro
    Directeur technique
    Inscrit en
    Janvier 2007
    Messages
    2 752
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 752
    Par défaut
    +1 avec ce que propose Thelvin.

    Pour plus d'explications, la méthode add(int, Object) de List te permet d'ajouter un objet au maximum à l'emplacement "taille de la liste".
    Par exemple :
    Si ta liste est vide (taille 0), seul "add(0, ...)" est autorisé.
    Si ta liste a un élément (taille 1), "add(0, ...)" et "add(1, ...)" sont autorisés.

    Si tu veux vraiment une structure de liste, voici une solution si tu connais par avance le nombre d'éléments à insérer et qu'il n'y a pas de "trous" dans la numérotation :
    - création d'une liste de la taille voulue : new Arraylist(taille)
    - insertion d'autant d'objets "null" dans cette liste (pour que chaque "case" soit initialisée)
    - remplacement de ces "null" par tes noeuds, dans le désordre avec la méthode set et non add. Cette fois cela fonctionnera
    Avant de poster, pensez à regarder la FAQ, les tutoriaux, la Javadoc (de la JRE que vous utilisez) et à faire une recherche
    Je ne réponds pas aux questions techniques par MP: les forums sont faits pour ça
    Mes articles et tutoriaux & Mon blog informatique

  4. #4
    Membre confirmé
    Inscrit en
    Janvier 2008
    Messages
    139
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 139
    Par défaut
    merci beaucoup pour vos réponses qui m'ont bien aidé

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

Discussions similaires

  1. [AC-2007] problème avec la méthode Add!
    Par cherifarouk dans le forum VBA Access
    Réponses: 7
    Dernier message: 22/11/2012, 11h48
  2. Réponses: 0
    Dernier message: 25/05/2010, 08h31
  3. [Débutant] VBA Excel : problème avec la méthode Add
    Par epsilonzero dans le forum MATLAB
    Réponses: 3
    Dernier message: 20/04/2010, 11h02
  4. [HashMap] Erreur d'insertion avec la méthode put() ?
    Par Adorien dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 12/02/2010, 13h41
  5. [Zip] Erreur avec la méthode add() de PclZip
    Par Anduriel dans le forum Bibliothèques et frameworks
    Réponses: 8
    Dernier message: 20/01/2007, 16h42

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