next up previous contents index
Next: Les relations d'ordre Up: Implémentations d'une collection Previous: Implémentations d'une collection

Collections et tableaux

Les collections constituent un moyen à la fois beaucoup plus souple et plus puissant que les tableaux pour stocker des données. Il est souvent commode de réaliser des ``conversions'' entre tableaux et collections, et de façon plus générale, d'établir des vues selon différents modèles.

La méthode Object[] toArray() retourne un nouveau tableau d'objets contenant tous les éléments d'une collection :

  Collection c = ...;
  Object[] t = c.toArray();

Si l'on souhaite spécifier le type du tableau ainsi créé, on doit utiliser une autre méthode Object[] toArray(Object[] a). Par exemple, pour créer un tableau de String (et non un tableau d'objets), il suffit de passer comme argument à cette méthode un tableau de String (même de taille nulle), et ensuite de faire un transtypage vers String[] :

  String[] t = (String[]) c.toArray(new String[0]);

Cette forme retorse est due au fait que le type d'une référence à un tableau n'est jamais déterminé par le type de ses éléments : par exemple, le tableau désigné par a dans l'exemple suivant est de type Object[], et non String[], alors que l'instance définie par s est de type String :

  Object[] a = {"p", "q"};
  Object s = "p";

De plus, si le tableau passé en argument à toArray() est de taille suffisante, il est utilisé pour copier les éléments de la collection, de sorte qu'aucun autre objet n'est créé en mémoire :

  String[] s = new String[c.size];
  Object[] x =  (String[]) c.toArray(s);  // x == s

Inversement, la méthode statique static List asList(Object[] a) de la classe java.util.Arrays construit une suite basée sur un tableau d'objets :

  Object[] t = ...;
  List l = Arrays.asList(t);

La documentation précise que la suite l est de taille fixe (ce n'est donc ni une ArrayList, ni une LinkedList) et que le tableau et la suite ont les mêmes éléments (toute modification faite à un élement de l modifie l'élément correspondant de t).


next up previous contents index
Next: Les relations d'ordre Up: Implémentations d'une collection Previous: Implémentations d'une collection
R. Lalement
2000-10-23