Укладка дженериков

Эта плохая практика?

ArrayList<ArrayList<ArrayList<Double>>> list = new ArrayList<ArrayList<ArrayList<Double>>>();
8
задан MikeD 14 July 2010 в 15:07
поделиться

7 ответов

Это не обязательно плохая практика. Это просто "нечитабельно". Немного терпения, в грядущей Java 7 вам разрешат опускать ошметки в конкретных общих типах при построении параметризованного типа:

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

Это называется type inference.

На данный момент, если вы можете жить с предупреждениями компилятора, вы также можете просто сделать так:

List<List<List<Double>>> list = new ArrayList();
4
ответ дан 5 December 2019 в 07:56
поделиться

Это трехмерная матрица, основанная на ArrayList. Выглядит не очень красиво, но именно так нам приходится ее писать.

Альтернативой может быть:

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

что немного короче и обычно нормально, так как в большинстве случаев вас интересуют только методы интерфейса.

Так что если вам нужна изменяемая по размеру трехмерная матричная структура данных, то это чистый подход.

7
ответ дан 5 December 2019 в 07:56
поделиться

Ну, а нужен ли вам список, элементы которого являются списками, а элементами являются списки? Мы понятия не имеем, чего вы пытаетесь достичь, пока вы не сообщите нам об этом.

Однако использование ArrayList напрямую вместо List действительно является плохой практикой.

2
ответ дан 5 December 2019 в 07:56
поделиться

Зависит от того, как вы собираетесь это использовать. Возможно, вы могли бы инкапсулировать двумерный список и в итоге получить List>. Предположительно, он будет иметь такие операции, как TwoDimensionalList.get(int i, int j) для получения элемента в j-й позиции i-го списка.

правка: если это не список двумерных списков, а скорее трехмерный список, то, конечно, вам нужен ThreeDimensionalList. (а если размерность вашего списка фиксирована, вы можете реализовать это внутри с помощью одного массива(списка), где элемент (i,j,k) находится в позиции i*dim1 + j*dim2 + k*dim3).

1
ответ дан 5 December 2019 в 07:56
поделиться

да. скорее всего, ваш код лучше использовать double[][][][][]

3
ответ дан 5 December 2019 в 07:56
поделиться

Возможно, будет хорошей идеей создать новый класс для обработки поведения, которого вы пытаетесь достичь. Я бы создал класс, использующий частный ArrayList<...> (предпочтение отдается делегированию, а не наследованию) и создал бы необходимые методы. Если что, это облегчит чтение и понимание.

4
ответ дан 5 December 2019 в 07:56
поделиться

По крайней мере, поможет более выразительное название, например, 3dList. Для меня предпочтительнее написать индивидуальную инкапсуляцию списка 2D / 3D, как предлагали другие выше.

0
ответ дан 5 December 2019 в 07:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: