2013-05-03 4 views
1

Я замечаю, что когда вы создаете массив, он может подниматься только до размера int, поскольку это единственное, что он принимает. Как создать тот, который соответствует длине?Как вы создаете большой массив?

+0

См. Этот вопрос: http://stackoverflow.com/questions/1071858/java-creating-byte-array-whose-size-is-represented-by-a-long – wchargin

+1

Почему вам нужен такой большой массив? Кажется, проблема дизайна. – Drogba

+0

Вы можете сделать многомерный массив Integer.MAX_VALUE-1 для каждого измерения, но это будет конец вашей памяти. – Voicu

ответ

2

В настоящее время Java-массивы ограничены индексами int по спецификации языка Java. (См section 10.4, "Array Access".)

Разрешение long индексов был proposed as part of Project Coin, до Java 7, но предложение was not accepted.

Альтернативой является использование объекта, представляющего вектор элементов, который поддерживает длинный индекс.

4

Вы можете использовать двумерный массив.

E.g.

Object[][] objects = new Object[Integer.MAX_VALUE][Integer.MAX_VALUE]; 
+2

FYI, который будет потреблять около 4 экзабайт памяти. Удачи. – Aurand

+0

Это всего лишь пример ;-) – mmirwaldt

0

Согласно спецификации языка Java (см: http://docs.oracle.com/javase/specs/jls/se7/html/jls-10.html), вы можете только индекс в массиве с помощью int (или short, byte или char, которые рассматриваются как int для этой цели).

Имейте в виду, что необходимость индексирования в массив с использованием long предполагает, что у вас будет> ~ 2 гига доступных смежных памяти. В зависимости от вашей стратегии сбора мусора и общей выделенной памяти это может быть сложно.

0

Вы можете создавать только классы BigArray на основе нескольких массивов и которые будут иметь методы set/get с длинными аргументами.

Смежные вопросы