Довжина масиву в 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
Torben

71

Перш за все, lengthце власність, тому було б arr.lengthзамість цього arr.length().

І повернеться 10, оголошеного розміру. Елементи, які ви не чітко заявляєте, ініціалізуються з 0.


Неможливо викликати length () для типу масиву long [] Java (67108980)
Alessandro

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 масив [] = new int [3]; array.length;

тому тут ми створили масив з простором пам’яті 3… ось як це виглядає насправді

0-й 1-й 2-й ...........> Індекс 2 4 5 ...........> Число

Отже, як ви бачите, розмір цього масиву дорівнює 3, але індекс масиву становить лише 2, оскільки будь-який масив починається з 0-го індексу.

'висновок другого оператора повинен бути 3, оскільки довжина масиву дорівнює 3 ... Будь ласка, не плутайте між значенням індексу та довжиною масиву ....

ура!


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 так само логічно, як і значення, які ви встановили вручну.


1

Він містить виділений розмір, 10. Інші індекси будуть містити значення за замовчуванням, яке дорівнює 0.


1

Якщо ви хочете логічний розмір масиву, ви можете пройти всі значення в масиві і перевірити їх проти нуля. Збільште значення, якщо воно не дорівнює нулю, і це був би логічний розмір. Оскільки розмір масиву фіксований, у вас немає вбудованого методу, можливо, вам слід переглянути колекції.


Це лише розмір "я припускаю, що 0 не є дійсним значенням", і якщо це корисно, це щось сумнівно.
Том

Щойно я придумав ідею отримати довжину масиву (0 недійсні). Як я вже сказав, ви можете використовувати колекції для більш точної обробки даних.
Струзе

1

Вона повинна бути:

int a = arr.length;

Слід уникати парентезу.


5
Ласкаво просимо, щоб стек перелив! Оскільки на це питання, якому вже більше року, і вже є шість інших відповідей, я би очікував довгого відповіді, ніж цього. Більше того, ви не відповідаєте на питання питання - просто фіксуєте помилку друку, на яку вже було націлено відповідь (яка відповідає на питання) та коментар до питання.
Джон Дворак

0

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

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

Тут метод .size () покаже вам кількість елементів у вашому списку, і ви можете рости це, додаючи речі.


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;
}
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.