Попытайтесь представить многомерный массив как массив массивов
Это не совсем так в JVM, но это лучшая ментальная модель для работы с этими видамивопросов.
Итак, если у вас есть
int [][] intervals = null;
, тогда ваш внешний массив равен нулю, и его можно позже инициализировать с помощью
int size = 10;
intervals = new int[size][];
, который создает массив int[]
, но в этом случае каждый из 10 внутренних массивов равен нулю.
Если вы хотите, чтобы все они были одинакового размера (например, массив 10 x 5), сделайте что-то вроде:
int size1 = 10;
int size2 = 5;
intervals = new int[size1][size2];
Но если вы хотите, чтобы они были разных размеров, сделайте что-нибудьнапример:
int size = 10;
intervals = new int[size][];
intervals[0] = new int[5];
intervals[1] = new int[4];
// etc...
Но все они предполагают, что вы знаете, насколько большим должен быть ваш массив, прежде чем вы начнете его заполнять.
Если вы этого не знаете, то вы хотите использоватьList
вместо этого - взгляните на ArrayList
.
Edit Я только что видел в вашем комментарии, что вы хотите именно этот последний случай, так что ...
Попробуйте что-то вроде:
List< List<Integer> > list = new ArrayList< List<Integer> >();
for(int i=0; i<10; i++) // You would loop over whatever input you're processing
{ // but I don't know what you're doing in that part of you code
// so I'll just do it 10 times.
List<Integer> innerList = new ArrayList< Integer >();
innerList.add( 1 );
innerList.add( 2 );
innerList.add( 3 );
// etc.
list.add( innerList );
}
В качестве альтернативы вы могли бы иметь:
List< int[] >
, что означало бы использование List для внешней коллекции, но массив длявнутренняя коллекция, если вы знаете, как долго будет ваша внутренняя коллекция. List<Integer>[]
, который использует массив для внешней коллекции и список для внутренней коллекции.
Это действительно зависит от того, как именно ваш код должен работать.