Длина массива в Java

101

Я объявил массив, как показано ниже:

int[] arr = new int[10];

Затем я присвоил массиву следующие значения:

arr[0] = 1;
arr[1] = 2;
arr[2] = 3;
arr[3] = 4;

Затем я объявил и инициализировал целочисленную переменную:

int arrayLength = arr.length;

Это будет полезно для определения фактического размера, но есть ли какой-либо способ найти логический размер массива?

Киран Бхат
источник

Ответы:

86

Она содержит выделенный размер, 10. Неназначенные индексы будут содержать значение по умолчанию 0для int.

Кай
источник
3
Да, массивы - это статическое распределение памяти.
Рамон Сараива
3
Можете показать javadoc? Я не знаю, где находится это свойство "длина".
Филип Рего,
1
@PhilipRego Это в спецификации языка docs.oracle.com/javase/specs/jls/se8/html/jls-10.html#jls-10.3
Торбен
71

Во-первых, lengthэто свойство, поэтому было бы arr.lengthвместо arr.length().

И вернет 10, заявленный размер. Элементы, которые вы не объявляете явно, инициализируются 0.

Costi Ciudatu
источник
Невозможно вызвать length () для типа массива long [] Java (67108980)
Алессандро Орнано
22

Чтобы найти длину массива, Aвы должны использовать lengthсвойство. Это как A.length, не используйте A.length()его, в основном, он используется для размера объектов, связанных со строкой.

введите описание изображения здесь

Свойство length всегда будет показывать общее выделенное пространство для массива во время инициализации.

Если у вас когда-либо возникнут какие-либо проблемы такого рода, простой способ - запустить ее. Удачного программирования!

Рави Панди
источник
6

Массивы - это статическое распределение памяти, поэтому, если вы инициализируете массив целых чисел:

int[] intArray = new int[15];

Длина всегда будет 15, независимо от того, сколько индексов заполнено.

И еще: когда вы инициализируете массив целых чисел, все индексы будут заполнены "0".

Рамон Сараива
источник
5

В Java ваш «фактический» и «логический» размер одинаковы. При распределении среда выполнения заполняет все слоты массива значениями по умолчанию. Итак, ваш aсодержит 10.

Дирк
источник
5

В этом случае arr.length вернет 10 - размер выделенного вами массива. Логический размер здесь не применяется, поскольку это массив фиксированной длины.

Когда вы инициализируете массив:

int[] arr = new int[10];

Java создаст массив из 10 элементов и инициализирует все их значениями 0. Подробную информацию о начальных значениях для этого и других примитивных типов см. В спецификации языка Java .

Том Эллиотт
источник
4
int[] arr = new int[10];

arr- это intмассив типов, имеющий размер 10. Это массив 10элементов. Если мы не инициализируем массив по умолчанию, элементы массива содержат значение по умолчанию. В случае массива int значение по умолчанию - 0.

length - свойство, применимое к массиву.
вот arr.lengthдам 10.

Анил
источник
3

`

int array [] = новый int [3]; array.length;

Итак, здесь мы создали массив с объемом памяти 3 ... вот как это выглядит на самом деле

0-я 1-я 2-я ...........> Индекс 2 4 5 ...........> Номер

Итак, как вы видите, размер этого массива равен 3, но индекс массива составляет только до 2, поскольку любой массив начинается с 0-го индекса.

вывод второго оператора должен быть 3, так как длина массива равна 3 ... Пожалуйста, не запутайтесь между значением индекса и длиной массива ....

ура!

Аюш Мурти AH
источник
2
  int arr[]={4,7,2,21321,657,12321};
  int length =arr.length;
  System.out.println(length); // will return 6

  int arr2[] = new int[10];
   arr2[3] = 4;
  int length2 =arr2.length;
  System.out.println(length2); // // will return 10. all other digits will be 0 initialize because staic memory initialization
алок
источник
1

Он будет содержать фактический размер массива, так как это то, чем вы инициализировали массив, когда вы его объявили. В Java нет концепции «логического» размера массива, поскольку значение по умолчанию 0 так же логично, как и значения, которые вы установили вручную.

Turix
источник
1

Он содержит выделенный размер, 10. Остальные индексы будут содержать значение по умолчанию, равное 0.

Нихил Кумар
источник
1

Если вам нужен логический размер массива, вы можете просмотреть все значения в массиве и проверить их на ноль. Увеличьте значение, если оно не равно нулю, и это будет логический размер. Поскольку размер массива фиксированный, у вас нет встроенного метода, возможно, вам стоит взглянуть на коллекции.

Struse
источник
Это просто размер «я полагаю, что 0 не является допустимым значением», и если это полезно, сомнительно.
Tom
Мне просто пришла в голову идея получить длину массива (0 недействительны). Как я уже сказал, вы можете использовать коллекции для более точной обработки данных.
Struse 01
1

Так должно быть:

int a = arr.length;

Скобки следует избегать.

Годлу
источник
5
Добро пожаловать в stack overflow! Поскольку этому вопросу уже больше года, и на него уже есть шесть других ответов, я ожидал бы более продолжительного ответа, чем этот. Более того, вы не отвечаете на суть вопроса, а просто исправляете опечатку, которая уже упоминалась в ответе (который отвечает на вопрос) и комментарии к вопросу.
Джон Дворжак
0

Массивы Java на самом деле имеют фиксированный размер, а другие ответы объясняют, как .length на самом деле не делает то, что вы ожидаете. Я просто хотел бы добавить, что, учитывая ваш вопрос, вы, возможно, захотите использовать ArrayList, то есть массив, который может увеличиваться и уменьшаться:

https://docs.oracle.com/javase/8/docs/api/java/util/ArrayList.html

Здесь метод .size () покажет вам количество элементов в вашем списке, и вы можете увеличивать его по мере добавления элементов.

Draxil
источник
0

если вы имеете в виду под "логическим размером" индекс массива, тогда просто int arrayLength = arr.length-1; поскольку индекс массива начинается с «0», поэтому логический или «индекс массива» всегда будет меньше фактического размера на «единицу».

Салах
источник
0

Массивам выделяется память во время компиляции в java, поэтому они статичны, элементы, не заданные или не измененные явно, устанавливаются со значениями по умолчанию. Вы можете использовать такой код, хотя это не рекомендуется, поскольку он не учитывает значения по умолчанию, даже если вы явно инициализируете их таким образом, это также может вызвать ошибки в дальнейшем. Как говорили другие, при поиске фактического размера необходимо использовать «.length» вместо «.length ()».

public int logicalArrayLength(type[] passedArray) {
    int count = 0;
    for (int i = 0; i < passedArray.length; i++) {
        if (passedArray[i] != defaultValue) {
            count++;
        }
    }
    return count;
}
Poobean
источник