Długość tablicy w Javie

101

Zadeklarowałem tablicę, jak pokazano poniżej:

int[] arr = new int[10];

Następnie przypisałem tablicy następujące wartości:

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

Następnie zadeklarowałem i zainicjowałem zmienną całkowitą:

int arrayLength = arr.length;

Będzie to przydatne do znalezienia rzeczywistego rozmiaru, ale czy istnieje metoda znalezienia logicznego rozmiaru tablicy?

Kiran Bhat
źródło

Odpowiedzi:

86

Zawiera on przydzielony rozmiar, 10. Nieprzypisane indeksy będą zawierały wartość domyślną 0dla int.

Kai
źródło
3
Tak, tablice są statyczną alokacją pamięci.
Ramon Saraiva,
3
Czy możesz pokazać javadoc? Nie wiem, gdzie jest ta właściwość „length”.
Philip Rego
1
@PhilipRego Jest w specyfikacji języka docs.oracle.com/javase/specs/jls/se8/html/jls-10.html#jls-10.3
Torben
71

Przede wszystkim lengthjest własnością, więc byłoby arr.lengthzamiast arr.length().

Zwróci 10, zadeklarowany rozmiar. Elementy, których nie zadeklarujesz jawnie, są inicjowane z wartością 0.

Costi Ciudatu
źródło
Nie można wywołać funkcji length () w tablicy typu long [] Java (67108980)
Alessandro Ornano
22

Aby znaleźć długość tablicy A, należy użyć lengthwłaściwości. To jest tak A.length, że nie używaj A.length()go głównie do rozmiaru obiektów związanych z ciągami.

wprowadź opis obrazu tutaj

Właściwość length zawsze będzie pokazywać całkowitą ilość miejsca przydzieloną tablicy podczas inicjalizacji.

Jeśli kiedykolwiek wystąpi którykolwiek z tego rodzaju problemów, prostym sposobem jest jego uruchomienie. Miłego programowania!

Ravi Pandey
źródło
6

Tablice są statyczną alokacją pamięci, więc jeśli zainicjujesz tablicę liczb całkowitych:

int[] intArray = new int[15];

Długość zawsze będzie wynosić 15, niezależnie od liczby wypełnionych indeksów.

I jeszcze jedno, kiedy zainicjujesz tablicę liczb całkowitych, wszystkie indeksy zostaną wypełnione „0”.

Ramon Saraiva
źródło
5

W Javie "rzeczywisty" i "logiczny" rozmiar jest taki sam. Czas wykonywania wypełnia wszystkie gniazda tablicy wartościami domyślnymi podczas alokacji. Więc masz a10.

Sztylet
źródło
5

W tym przypadku parametr arr.length zwróci 10, czyli rozmiar przydzielonej tablicy. Rozmiar logiczny tak naprawdę nie ma tutaj zastosowania, ponieważ jest to tablica o stałej długości.

Podczas inicjalizacji tablicy:

int[] arr = new int[10];

Java utworzy tablicę z 10 elementami i zainicjuje je wszystkie do 0. Szczegółowe informacje na temat wartości początkowych dla tego i innych typów pierwotnych można znaleźć w specyfikacji języka Java .

Tom Elliott
źródło
4
int[] arr = new int[10];

arrjest inttablicą typów o rozmiarze 10. Jest to tablica 10elementów. Jeśli nie zainicjujemy tablicy domyślnie, elementy tablicy zawierają wartość domyślną. W przypadku tablicy int domyślną wartością jest 0.

length to właściwość, która ma zastosowanie do tablicy.
tutaj arr.lengthda 10.

Indygowiec
źródło
3

`

int tablica [] = nowa int [3]; array.length;

więc tutaj utworzyliśmy tablicę z przestrzenią pamięci 3 ... tak to wygląda w rzeczywistości

0th 1st 2nd ...........> Indeks 2 4 5 ...........> Liczba

Więc, jak widzisz, rozmiar tej tablicy wynosi 3, ale indeks tablicy wynosi tylko do 2, ponieważ każda tablica zaczyna się od zerowego indeksu.

druga instrukcja 'wyjście powinno wynosić 3, ponieważ długość tablicy wynosi 3 ... Proszę nie pomylić wartości indeksu z długością tablicy ....

Twoje zdrowie!

Ayush Murty AH
źródło
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
alok
źródło
1

Będzie zawierał rzeczywisty rozmiar tablicy, ponieważ jest to wartość, którą zainicjowałeś tablicę, kiedy ją deklarujesz. Java nie ma pojęcia o „logicznym” rozmiarze tablicy, jeśli chodzi o to, domyślna wartość 0 jest tak samo logiczna, jak wartości ustawione ręcznie.

Turix
źródło
1

Zawiera przydzielony rozmiar, 10. Pozostałe indeksy będą zawierać wartość domyślną, która wynosi 0.

Nikhil Kumar
źródło
1

Jeśli chcesz logicznego rozmiaru tablicy, możesz przejść przez wszystkie wartości w tablicy i sprawdzić je względem zera. Zwiększ wartość, jeśli nie jest równa zero i byłby to rozmiar logiczny. Ponieważ rozmiar tablicy jest stały, nie masz żadnej wbudowanej metody, być może powinieneś rzucić okiem na kolekcje.

Struse
źródło
To jest po prostu rozmiar „Zakładam, że 0 nie jest prawidłową wartością” i jeśli jest to pomocne, jest trochę wątpliwe.
Tom
Właśnie wpadłem na pomysł, aby uzyskać długość tablicy (0 są nieprawidłowe). Jak powiedziałem, możesz używać kolekcji do bardziej precyzyjnej manipulacji danymi.
Struse
1

Powinno być:

int a = arr.length;

Należy unikać nawiasów.

Godlu
źródło
5
Witamy w przepełnieniu stosu! Ponieważ jest to pytanie, które ma już ponad rok i ma już sześć innych odpowiedzi, spodziewałbym się długiej odpowiedzi niż ta. Co więcej, nie odpowiadasz na punkt pytania - po prostu poprawiasz literówkę, która była już celem odpowiedzi (która odpowiada na pytanie) i komentarz do pytania.
John Dvorak
0

Tablice Java mają w rzeczywistości stały rozmiar, a inne odpowiedzi wyjaśniają, dlaczego .length nie robi tego, czego można się spodziewać. Chciałbym tylko dodać, że biorąc pod uwagę twoje pytanie, to, czego możesz chcieć użyć, to ArrayList, czyli tablica, która może rosnąć i zmniejszać się:

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

Tutaj metoda .size () pokaże liczbę elementów na liście i możesz ją powiększać w miarę dodawania elementów.

draxil
źródło
0

jeśli masz na myśli „rozmiar logiczny”, indeks tablicy, to po prostu int arrayLength = arr.length-1; ponieważ indeks tablicy zaczyna się od „0”, więc logiczny lub „indeks tablicy” będzie zawsze mniejszy od rzeczywistego rozmiaru o „jeden”.

Salah
źródło
0

Tablice są przydzielane w pamięci w czasie kompilacji w języku Java, więc są statyczne, a elementy, które nie zostały jawnie ustawione lub zmodyfikowane, mają ustawione wartości domyślne. Mógłbyś użyć takiego kodu, chociaż nie jest to zalecane, ponieważ nie liczy wartości domyślnych, nawet jeśli jawnie zainicjujesz je w ten sposób, prawdopodobnie spowoduje to również błędy. Jak powiedzieli inni, szukając rzeczywistego rozmiaru, należy użyć „.length” zamiast „.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
źródło