Tablica ciągów Java: czy istnieje rozmiar metody?

152

Pochodzę z tła PHP, aw PHP jest array_size()funkcja, która mówi, ile elementów w tablicy jest używanych.

Czy istnieje podobna metoda dla String[]tablicy? Dzięki.

phill
źródło
3
Heh, wszystkie odpowiedzi były w tej samej minucie.
jjnguy
1
Ach, PHP ze swoją zagraconą globalną przestrzenią nazw. Stare, dobre czasy ...
kevinji,
2
myślę, że ma na myśli liczbę php (), a nie array_size ()
Joshua Burns

Odpowiedzi:

277

Tak .length(właściwość, a nie metoda):

String[] array = new String[10];
int size = array.length;
Kris
źródło
2
cześć, jak moglibyśmy znaleźć dokumenty, które zawierają listę wszystkich możliwych właściwości i funkcji obiektu tablicy? Nie mam na myśli obiektu Arrays, który jest jedynymi dokumentami, które mogę znaleźć.
GMsoF
1
@GMsoF Dokumentacja dla "[]" (tablica, a nie obiekt Arrays) jest w rzeczywistości specyfikacją Java. .eg docs.oracle.com/javase/specs/jls/se7/html/jls-10.html Edytuj: Ach ... komentarz pochodzi z 2013 roku ...
Acapulco
44
array.length

W rzeczywistości jest to ostatni element tablicy, a nie metoda.

jjnguy
źródło
2
IIRC, to właściwie nie jest pole, po prostu wygląda jak jedno.
Tom Hawtin - tackline
Och, więc co to jest? Jakaś specjalna rzecz z Array?
jjnguy
3
„pseudo pole”, które jest kompilowane do kodu operacji o specjalnej długości tablicy, a nie do kodu operacji dostępu do pola.
Pete Kirkham
2
Jest to pole zgodnie z §10.7 ( java.sun.com/docs/books/jls/third_edition/html/arrays.html#10.7 ): „Publiczna końcowa długość pola, która zawiera liczbę składników tablicy ( długość może być dodatnia lub zerowa). "
Michael Myers
19

Ponadto prawdopodobnie warto zauważyć, że jeśli masz wielowymiarową tablicę, możesz uzyskać odpowiedni wymiar, po prostu dodając „[0]” do tablicy, o którą pytasz, aż dojdziesz do odpowiedniej osi / krotki / wymiaru.

Jest to prawdopodobnie lepiej wyjaśnione za pomocą następującego kodu:

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
    }

}

Który daje wynik:

5
12
Liang
źródło
15

Właściwość końcowa array.length

jest to własność publiczna i ostateczna. To jest ostateczne, ponieważ tablice w Javie są niezmienne według rozmiaru (ale modyfikowalne według wartości elementu)

dfa
źródło
14

Tablice są obiektami i mają pole długości.

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

haha. długość wynosiłaby 2

willcodejavaforfood
źródło
Tylko po to, żeby się dziwić. Uważam jednak, że tablice NIE są obiektami w Javie - są jednym z dwóch referencyjnych typów zmiennych. Drugi to obiekty.
jabbie
2
@jabbie: Naprawdę? Czy masz do tego odniesienie? Kwestionuję to tylko dlatego, że możesz powiedzieć Object o = new String [] {"hello"};
Simon Nickerson
simon Myślę, że powodem, dla którego to stwierdzenie działa, jest to, że wprowadziły one klasy refleksyjne dla wszystkich typów pierwotnych.
Brian Sweeney
9
Przeczytaj pierwsze zdanie docs.oracle.com/javase/specs/jls/se8/html/jls-10.html, a następnie spróbuj nam powiedzieć, że tablice nie są obiektami. ;)
Michael Myers
1
mogłeś stosować jakąś inną nazwę zmiennej, to tak mi się rozpraszać
Kosmiczne Rocker
11

W javie jest lengthpole, którego możesz użyć na dowolnej tablicy, aby sprawdzić jej rozmiar:

    String[] s = new String[10];
    System.out.println(s.length);
bruno conde
źródło
1
dziękuję, że nie wdałeś się w szczegóły techniczne dotyczące tego, co to może być, a czego nie, i po prostu udzieliłeś krótkiej i zwięzłej odpowiedzi. +1 dla Ciebie. :)
Joshua Burns
9

Jeśli chcesz, aby funkcja to robiła

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

Może to być przydatne, jeśli nie wiesz, jakiego typu masz tablicę, np. Int [], byte [] lub Object [].

Peter Lawrey
źródło
6

Istnieje różnica między długością Stringi arraywyjaśnieniem:

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
Valona
źródło
Należy to zaktualizować w pytaniu, jeśli jest to wyjaśnienie.
Whitecat
5

Odpowiedź brzmi: „Wszyscy”. Tablica java ma przydzieloną stałą liczbę gniazd elementów. Atrybut „długość” powie Ci, ile. Ta liczba jest niezmienna przez cały okres istnienia tablicy. Aby uzyskać odpowiednik o zmiennym rozmiarze, potrzebujesz jednej z klas java.util.List - w której możesz użyć metody size (), aby dowiedzieć się, ile elementów jest używanych.

Jednakże, nie ma „w użyciu”, a potem jest w użytku . W tablicy obiektów klasy możesz mieć miejsca na elementy, których elementy są obiektami o wartości null, więc nawet jeśli liczą się one w atrybucie length, ale definicje większości ludzi, nie są używane (YMMV, w zależności od aplikacji). Nie ma wbudowanej funkcji zwracającej wartości null / niezerowe.

Obiekty listy mają jeszcze inną definicję „W użyciu”. Aby uniknąć nadmiernego tworzenia / niszczenia podstawowych struktur pamięci masowej, w tych klasach zazwyczaj występuje pewne dopełnienie. Jest używany wewnętrznie, ale nie jest liczony w zwracanej metodzie size (). A jeśli spróbujesz uzyskać dostęp do tych elementów bez rozszerzania listy (za pomocą metod add), otrzymasz niedozwolony wyjątek indeksu.

Tak więc w przypadku list możesz mieć „W użyciu” dla niezerowych, zatwierdzonych elementów, Wszystkie zatwierdzone elementy (w tym puste) lub Wszystkie elementy, w tym aktualnie przydzielone miejsce na rozszerzenie.

Tim H.
źródło
2

Wszystkie powyższe odpowiedzi są prawidłowe. Ważną rzeczą do zaobserwowania jest to, że tablice mają atrybut długości, ale nie metodę długości. Za każdym razem, gdy używasz ciągów i tablic w Javie, możesz napotkać trzy podstawowe modele:

  1. Ciąg s = nowy ciąg („vidyasagar”);
    System.out.println (s.length ()); // W tym przypadku używamy tylko String. Brak atrybutu długości dla ciągów znaków. musimy użyć metody length ().
  2. int [] s = new int [10]; System.out.println (s.length); // tutaj używamy atrybutu długości tablic.
  3. Ciąg [] s = nowy Ciąg [10];
    System.out.println (s.length); // Tutaj, mimo że typ danych to String, nie jest to pojedynczy łańcuch. s jest odniesieniem do tablicy ciągów. Więc używamy atrybutu length tablic, aby wyrazić, ile ciągów może zmieścić się w tej tablicy.
vidyasagar
źródło
1

Nie do końca jest to odpowiedź na twoje pytanie, ale jeśli chcesz mieć coś w rodzaju tablicy, która może rosnąć i maleć, nie powinieneś używać tablicy w javie. Prawdopodobnie najlepiej jest używać ArrayList lub innej implementacji List.

Następnie możesz wywołać na nim size (), aby uzyskać jego rozmiar.

Simon Groenewolt
źródło