Эта плохая практика?
ArrayList<ArrayList<ArrayList<Double>>> list = new ArrayList<ArrayList<ArrayList<Double>>>();
Это не обязательно плохая практика. Это просто "нечитабельно". Немного терпения, в грядущей Java 7 вам разрешат опускать ошметки в конкретных общих типах при построении параметризованного типа:
List<List<List<Double>>> list = new ArrayList<>();
Это называется type inference.
На данный момент, если вы можете жить с предупреждениями компилятора, вы также можете просто сделать так:
List<List<List<Double>>> list = new ArrayList();
Это трехмерная матрица, основанная на ArrayList. Выглядит не очень красиво, но именно так нам приходится ее писать.
Альтернативой может быть:
List<List<List<Double>>> list = new ArrayList<List<List<Double>>>();
что немного короче и обычно нормально, так как в большинстве случаев вас интересуют только методы интерфейса.
Так что если вам нужна изменяемая по размеру трехмерная матричная структура данных, то это чистый подход.
Ну, а нужен ли вам список, элементы которого являются списками, а элементами являются списки? Мы понятия не имеем, чего вы пытаетесь достичь, пока вы не сообщите нам об этом.
Однако использование ArrayList
напрямую вместо List
действительно является плохой практикой.
Зависит от того, как вы собираетесь это использовать. Возможно, вы могли бы инкапсулировать двумерный список и в итоге получить List
. Предположительно, он будет иметь такие операции, как TwoDimensionalList.get(int i, int j)
для получения элемента в j
-й позиции i
-го списка.
правка: если это не список двумерных списков, а скорее трехмерный список, то, конечно, вам нужен ThreeDimensionalList
. (а если размерность вашего списка фиксирована, вы можете реализовать это внутри с помощью одного массива(списка), где элемент (i,j,k)
находится в позиции i*dim1 + j*dim2 + k*dim3
).
да. скорее всего, ваш код лучше использовать double[][][][][]
Возможно, будет хорошей идеей создать новый класс для обработки поведения, которого вы пытаетесь достичь. Я бы создал класс, использующий частный ArrayList<...>
(предпочтение отдается делегированию, а не наследованию) и создал бы необходимые методы. Если что, это облегчит чтение и понимание.
По крайней мере, поможет более выразительное название, например, 3dList. Для меня предпочтительнее написать индивидуальную инкапсуляцию списка 2D / 3D, как предлагали другие выше.