Emstackr des génériques

Est-ce une mauvaise pratique?

ArrayList<ArrayList<ArrayList>> list = new ArrayList<ArrayList<ArrayList>>(); 

Ce n’est pas nécessairement une mauvaise pratique. C’est juste “illisible”. Ayez un peu de patience, dans la prochaine version de Java 7, vous êtes autorisé à omettre les éléments génériques spécifiques lors de la construction du type paramétré:

 List>> list = new ArrayList<>(); 

C’est ce qu’on appelle l’ inférence de type .

A partir de maintenant, si vous pouvez vivre avec les avertissements du compilateur, vous pouvez également le faire:

 List>> list = new ArrayList(); 

C’est une masortingce sortingdimensionnelle basée sur ArrayList. Ça n’a pas l’air bien, mais c’est comme ça que nous devons l’écrire.

Une alternative pourrait être:

 List>> list = new ArrayList>>(); 

ce qui est un peu plus court et généralement correct, car dans la plupart des cas, vous êtes simplement intéressé par les méthodes d’interface.

Donc, si vous avez besoin d’une structure de données masortingcielle sortingdimensionnelle redimensionnable, c’est une approche simple.

Ce serait probablement une bonne idée de créer une nouvelle classe pour gérer le comportement que vous essayez d’accomplir. Je voudrais créer une classe qui utilise un ArrayList<...> privé ArrayList<...> (favoriser la délégation plutôt que l’inheritance) et créer les méthodes nécessaires. Au contraire, il devrait être plus facile à lire et à comprendre.

Oui. très probablement votre code est mieux avec double[][][]

Eh bien, avez-vous besoin d’une liste dont les éléments sont des listes dont les éléments sont des listes? Nous n’avons aucune idée de ce que vous essayez d’accomplir à moins que vous ne nous le disiez.

Cependant, utiliser ArrayList directement plutôt que List est en effet une mauvaise pratique.

Cela dépend de la façon dont vous comptez l’utiliser. Peut-être pourriez-vous encapsuler la liste à deux dimensions et vous retrouver avec une List> . Vraisemblablement, il aurait des opérations telles que TwoDimensionalList.get(int i, int j) pour obtenir un élément à la j ème position de la i ème liste.

edit: si ce n’est pas une liste de listes à deux dimensions, mais plutôt une liste à trois dimensions, alors bien sûr, vous voulez une liste à trois dimensions. (et si les dimensions de votre liste sont fixes, vous pouvez implémenter cela en interne avec un seul tableau (liste) où l’élément (i,j,k) est situé à la position i*dim1 + j*dim2 + k*dim3 ).

Au moins, le nommer de manière plus explicite, quelque chose comme 3dList, aiderait. Pour moi, ce que je préfère, c’est d’écrire une encapsulation personnalisée d’une liste 2D / 3D, comme d’autres l’ont suggéré plus haut.