Une alternative aux listes de dimension 2 ou plus

Contenu du snippet

Cette source propose une alternative aux listes à plusieurs dimensions.

Les listes à plusieurs dimensions peuvent s'avérer peu adaptés à certaines problématiques en particulier si on a besoin d'effectuer un traitement systématique sur chaque valeur de la liste. Dans ce cas, il faut itérer sur autant de valeurs que de dimensions de la liste. De plus, la création de cette liste de listes oblige à créer un grand nombre d'objets.

Par exemple pour une matrice numérique, si on veut multiplier tous les nombres par 3, il faut itérer à la fois sur les lignes et sur les colonnes. Ma source est donc plus adaptée dans ce cas précis.

Je ne dis pas que cette source est "meilleure" qu'un tableau a plusieurs dimensions mais simplement qu'elle pourra être plus adaptée dans certains cas.

Source / Exemple :


 import java.util.ArrayList; import java.util.List; public class Matrice<T> {  /** 

* Les valeurs de la matrice 

*/
  private List<T> valeurs;  /** 

* Le nombre de colonnes de la matrice 

* non modifiable 

*/
  private final int nbColonnes;  /** 

* Constructeur de la matrice 

* @param nbColonnes 

*  Le nombre de colonnes de la matrice 

*/
  public Matrice(int nbColonnes){   this.nbColonnes = nbColonnes;   valeurs = new ArrayList<T>();  }  /** 

* Procedure qui permet d'ajouter une ligne 

* @param valeurs 

*  Les valeurs de la ligne a ajouter 

*/
  public void addLine(List<T> valeurs){   if(valeurs.size()==nbColonnes){    this.valeurs.addAll(valeurs);   }  }  /** 

* Fonction qui retourne l'element de la 

* ligne i et de la colonne j 

*/
  public T get(int i, int j){   return valeurs.get(nbColonnes*i+j);  }  /** 

* Fonction qui retourne le nombre de colonnes 

* de la matrice 

* @return le nombre de colonnes 

*/
  public final int getNbColonnes(){   return nbColonnes;  }  /** 

* Fonction qui retourne le nombre de lignes 

* de la matrice 

* @return le nombre de lignes 

*/
  public int getNbLignes(){   int res = 0;   if(nbColonnes!=0){    res = (int)(valeurs.size()/nbColonnes);   }   return res;  }  /** 

* Accesseur aux valeurs de la matrice 

* @return la liste des valeurs de la matrice 

*/
  public List<T> getValeurs(){   return valeurs;  }  public String toString(){   StringBuilder sb = new StringBuilder();   for(int i=0; i<getNbColonnes(); i++){    for(int j=0; j<getNbLignes(); j++){     sb.append(get(i,j));     sb.append(" ");    }    sb.append("\n");   }   return sb.toString();  }  public static void main(String[] args){   /*Creation des lignes de la matrice*/   List<String> l1 = new ArrayList<String>();   List<String> l2 = new ArrayList<String>();   List<String> l3 = new ArrayList<String>();   for(int i=0; i<3; i++){    l1.add("1");    l2.add("2");    l3.add("3");   }         /*Creation de la matrice et ajout des lignes*/   Matrice<String> matrice = new Matrice<String>(3);   matrice.addLine(l1);   matrice.addLine(l2);   matrice.addLine(l3);      System.out.println("Matrice initiale");   System.out.println(matrice.toString());   /*concatenation d'une chaine de carateres simplement*/   for(int x=0; x<matrice.getValeurs().size(); x++){    matrice.getValeurs().set(x, "a"+matrice.getValeurs().get(x));   }   System.out.println("Matrice modifiee");   System.out.println(matrice.toString());  } } 

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.