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 :

ArrayList multidimensionnel


Sujet :

Collection et Stream Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté

    Profil pro
    Inscrit en
    Avril 2004
    Messages
    77
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 77
    Par défaut ArrayList multidimensionnel
    Bonjour.
    J'aurai voulu savoir si il était possible de créer un ArrayList à plusieurs dimensions ?
    Par exemple un tableau tab[][][] mais en utilisant un ArrayList plutôt qu'un tableau ?

    Et comment fait-on pour accéder à un élement en utilisant plusieurs index ?
    Peut-on surcharger la méthde get(index) en fesant get(index,index) ? Ou y a-t-il un autre moyen ?

    Merci d'avance.

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 760
    Par défaut
    Je dirais que ce n'est pas defini par defaut mais que cela se definit tres rapidement puisque
    les coordonnées [x][y] sont equivalentes à y*X_MAX+x. Donc oui on peut surcharger et cette nouvelle methode ne ferait qu'une addition en plus.

    Les [][] en C++ sont une abstraction de [] logiquement ça peut se comprendre.

  3. #3
    Membre Expert Avatar de herve91
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 282
    Par défaut
    Non si tu utilises des ArrayList pour simuler des tableaux à plusieurs dimensions, tu ne peux pas te baser sur une formule du style y*X_MAX+x (d'ailleurs même avec des tableaux ce n'est pas vrai) : tab[x][y] n'est pas du tout équivalent à tab[y * X_MAX + x].

    Pour ce qui est des ArrayList de ArrayList (simulant des tableaux à deux dimensions), la méthode get(index,index) donnerait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Object get(int x, int y) {
      Object row = this.get(x);
      return row instanceof ArrayList
         ? ((ArrayList) row).get(y);
         : null;
    }
    en supposant this instance d'une classe dérivée de ArrayList.

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 760
    Par défaut
    C'est pour cela que j'ai mentionné C++ mais j'aurais du le faire des la premiere ligne c'est vrai... Ma methode derive du C++ et ne donne que des tableaux "rectangulaires". Cela depend effectivement de l'usage que l'on veut en faire. Ta methode est une solution, je l'avoue et permet de faire 2D "non-rectangulaires". Elle repose (comme en Java) sur le fait que le tableau à 2D dimensions n'est qu'un tableau contenant des Objects qui sont eux memes des tableaux.

    En bref ma solution est bonne pour un tableau (taille fixe) mais pas ideale pour une Collection a taille variable (ArrayList). Or la question portait sur une collection donc je vais aller dormir...

    Ps: Une raison de ce post est que dans certain langage il faut redefinir le tableau multidimensionel à partir d'un tableau monodimensionel mais ce n'était pas ça la question.

    RE-Ps :Il faut DELESTER mes posts. Désolé les modos.

  5. #5
    Membre Expert Avatar de herve91
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 282
    Par défaut
    euh je ne veux pas te contredire mais en Java un tableau de tableaux est un tableau d'objets puisqu'un tableau est un objet... Donc même dans le cas de tableaux rectangulaires, la formule
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tab[x][y] = tab[y * X_MAX + x]
    reste fausse (d'ailleurs ce serait plutôt x * Y_MAX + y). Tu ne peux tout simplement pas faire de transposition de calcul d'indices multi-dimensionnels -> mono-dimensionnel.

  6. #6
    Invité de passage
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 1
    Par défaut
    Bonjour j'aimerais savoir si il existe une méthode équivalente à ".get" qui est plus spécifique pour ArrayList. En utilisant "produits.get(1)" dans mon code par exemple, le résultat affichera la totalité de la 1ere ligne, je cherche donc une méthode qui permettrait de choisir en plus une colonne dans la ligne demandée. Merci à vous.

  7. #7
    Membre expérimenté Avatar de jiddou
    Inscrit en
    Août 2007
    Messages
    247
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 247
    Par défaut
    Bonjour, on peut pas s'aventurer à faire une declaration du genre.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ArrayList<ArrayList<ArrayList<String>>>  list = new ArrayList<ArrayList<ArrayList<String>>>();
    et l'accès à l'élément i,j,k se fait de la manière suivante sans réimplementer la méthode get:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    list.get(i).get(j).get(k);

  8. #8
    Membre Expert Avatar de Uther
    Homme Profil pro
    Tourneur Fraiseur
    Inscrit en
    Avril 2002
    Messages
    4 690
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Tourneur Fraiseur

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 690
    Par défaut
    Oui. La syntaxe est certes très moche, mais c'est bien ce qui correspond vraiment à un ArrayList a 3 dimensions.

Discussions similaires

  1. [C#][VS2005]ArrayList multidimensionnel ?
    Par gassisprog dans le forum C#
    Réponses: 4
    Dernier message: 02/05/2008, 09h30
  2. [info]ArrayList
    Par schousso dans le forum Collection et Stream
    Réponses: 7
    Dernier message: 06/05/2004, 11h44
  3. [Fichier] Ajout des lignes de doc dans arraylist
    Par 3adoula dans le forum Entrée/Sortie
    Réponses: 9
    Dernier message: 29/04/2004, 22h41
  4. [ STRUTS ][ JSP ][ ArrayList] un lien pour trier
    Par LoulouFifi dans le forum Servlets/JSP
    Réponses: 7
    Dernier message: 03/02/2004, 17h24
  5. [langage] tableau multidimensionnel
    Par totox17 dans le forum Langage
    Réponses: 3
    Dernier message: 03/12/2002, 15h58

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