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).