Java String масив: чи є розмір методу?


152

Я надходжу з фонового array_size()режиму php і в php є функція, яка говорить вам, скільки елементів у масиві використовується.

Чи існує подібний метод для String[]масиву? Дякую.


3
Ге, всі відповіді були за одну і ту ж хвилину.
jjnguy

1
Ах, PHP зі своїм захаращеним глобальним простором імен. Старі добрі часи ...
kevinji

2
я думаю, він має на увазі php count (), а не array_size ()
Джошуа Бернс

Відповіді:


277

Так, .length(властивість як, а не метод):

String[] array = new String[10];
int size = array.length;

2
привіт, як ми могли знайти документи, в яких перераховані всі можливі властивості та функції об’єкта масиву? Я не маю на увазі об’єкт Arrays, який є єдиними документами, які я можу знайти.
GMsoF

1
@GMsoF Документація для "[]" (масив, а не об'єкт Arrays) - це фактично специфікація Java. .eg docs.oracle.com/javase/specs/jls/se7/html/jls-10.html Edit: Ах ... коментар від 2013 ...
Акапулько

44
array.length

Це насправді кінцевий член масиву, а не метод.


2
IIRC, це насправді не поле, воно просто схоже на одне.
Том Хотін - тайклін

О, тоді що це? Якась особлива річ з масивом?
jjnguy

3
"псевдо поле", яке компілюється у спеціальний оп-код масиву довжини, а не оп-код доступу до поля.
Піт Кіркхем,

2
Це поле, що відповідає §10.7 ( java.sun.com/docs/books/jls/third_edition/html/arrays.html#10.7 ): "Загальна загальна довжина поля, яка містить кількість компонентів масиву ( довжина може бути додатною або нульовою). "
Майкл Майерс

19

Також, мабуть, корисно зауважити, що якщо у вас є багатовимірний масив, ви можете отримати відповідний вимір, просто додавши "[0]" до масиву, який ви запитуєте, доки не потрапите на відповідну вісь / кортеж / розмірність.

Це, мабуть, краще пояснено за допомогою наступного коду:

public class Test {
    public static void main(String[] args){
        String[][] moo = new String[5][12];

        System.out.println(moo.length); //Prints the size of the First Dimension in the array
        System.out.println(moo[0].length);//Prints the size of the Second Dimension in the array
    }

}

Що дає результат:

5
12

15

Остаточне властивість array.length

це державна та кінцева власність. Це остаточно, тому що масиви в Java незмінні за розміром (але змінюються за значенням елемента)


14

Масиви - це об'єкти, і вони мають поле довжини.

String [] haha ​​= {"olle", "bulle"};

haha.length буде 2


Тільки до нитпика. Але я вважаю, що масиви НЕ є об’єктами в Java - вони є однією з двох змінних типів опорного типу. Інші бувають об'єктами.
jabbie

2
@jabbie: Дійсно? У вас є посилання на це? Я сумніваюся лише в тому, що ви можете сказати Object o = new String [] {"привіт"};
Саймон Нікерсон

Симон, я думаю, що причина цього твердження працює в тому, що вони ввели рефлексивні класи для всіх примітивних типів.
Брайан Свіні

9
Прочитайте перше речення docs.oracle.com/javase/specs/jls/se8/html/jls-10.html, а потім спробуйте сказати нам, що масиви не є об’єктами. ;)
Майкл Майерс

1
ви могли б використовувати якесь інше ім’я змінної, яке мене так відволікає
Space Rocker

11

У java є lengthполе, яке ви можете використовувати на будь-якому масиві, щоб дізнатися його розмір:

    String[] s = new String[10];
    System.out.println(s.length);

1
дякую за те, що ви не вникали в технічні відомості про те, що це може бути, а може і не бути, і просто надаєте коротку і стислу відповідь. +1 для вас. :)
Джошуа Бернс

9

Якщо ви хочете, щоб функція це робила

Object array = new String[10];
int size = Array.getlength(array);

Це може бути корисно, якщо ви не знаєте, який тип масиву у вас є, наприклад, int [], byte [] або Object [].


6

Існує різниця між довжиною Stringта arrayуточненням:

int a[] = {1, 2, 3, 4};
String s = "1234";

a.length //gives the length of the array

s.length() //gives the length of the string

Це слід оновити у питанні, якщо воно є уточненням.
Whitecat

5

Відповідь - "Усі вони". Ява-масив виділяється з фіксованою кількістю слотів елементів. Атрибут "довжина" підкаже, скільки. Це число незмінне протягом життя масиву. Для отримання змінного еквівалента вам потрібен один з класів java.util.List - де ви можете використовувати метод size (), щоб дізнатися, скільки елементів використовується.

Однак є "In use", а потім є In Use . У масиві об’єктів класу ви можете мати слоти елементів, елементи яких є нульовими об'єктами, тому, хоча вони рахуються в атрибуті довжини, але визначення більшості людей, вони не використовуються (YMMV, залежно від програми). Немає вбудованої функції для повернення нульових / ненульових підрахунків.

Об'єкти списку мають ще одне визначення поняття "У користуванні". Щоб уникнути надмірного створення / руйнування базових структур зберігання, в цих класах зазвичай є деякі прокладки. Він використовується внутрішньо, але не враховується методом повернутого розміру (). І якщо ви спробуєте отримати доступ до цих елементів без розширення списку (методами додавання), ви отримаєте незаконне виключення з індексу.

Таким чином, для списків ви можете мати "In Use" для ненульових, скоєних елементів, усіх прихильних елементів (включаючи нульові елементи) або всіх елементів, включаючи розширений в даний час простір розширення.


2

Усі вищезазначені відповіді належні. Важливо спостерігати, що масиви мають атрибут довжини, а не метод довжини. Щоразу, коли ви використовуєте рядки та масиви в Java, три основні моделі, з якими ви можете зіткнутися, це:

  1. String s = новий рядок ("vidyasagar");
    System.out.println (s.length ()); // У цьому випадку ми використовуємо лише String. Немає атрибутів довжини для Strings. ми повинні використовувати метод length ().
  2. int [] s = new int [10]; System.out.println (s.length); // тут ми використовуємо атрибут length масивів.
  3. String [] s = новий рядок [10];
    System.out.println (s.length); // Тут, хоча тип даних є String, це не єдина строка. s - посилання на масив Strings. Тому ми використовуємо атрибут length масивів, щоб виразити, скільки рядків може вміститися в цьому масиві.

1

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

Потім ви можете зателефонувати на розмір (), щоб отримати його розмір.

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