Java String dizisi: bir yöntem boyutu var mı?


152

Ben bir php arka plan geliyor ve php, array_size()dizide kaç element kullanılan söyleyen bir işlevi vardır.

Bir String[]dizi için benzer bir yöntem var mı ? Teşekkürler.


3
Heh, tüm cevaplar aynı dakika içinde.
jjnguy

1
Ah, PHP dağınık küresel ad alanı ile. Eski güzel günler ...
Kevinji

2
Bence php's count () değil array_size () değil
Joshua Burns

Yanıtlar:


277

Evet, .length(özellik değil, yöntem değil):

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

2
merhaba, dizi nesnesinin tüm olası özelliklerini ve işlevlerini listeleyen belgeleri nasıl bulabiliriz? Bulabildiğim tek dokümanlar olan Arrays nesnesi demek istemiyorum.
GMsoF

1
@GMsoF "[]" (Arrays nesnesi değil dizi) belgeleri aslında Java özelliğidir. .eg docs.oracle.com/javase/specs/jls/se7/html/jls-10.html Düzenleme: Ah ... yorum 2013'ten itibaren ...
Acapulco

44
array.length

Aslında dizinin son üyesidir, bir yöntem değildir.


2
IIRC, aslında bir alan değil, sadece bir alan gibi görünüyor.
Tom Hawtin - tackline

Oh, o zaman nedir? Bazı özel Array şeyleri?
jjnguy

3
alan erişim op kodu yerine özel bir dizi uzunluğu op koduna derlenen bir "sözde alan".
Pete Kirkham

2
Bu §10.7 (accroding, bir alandır java.sun.com/docs/books/jls/third_edition/html/arrays.html#10.7 ): "dizinin bileşen sayısını (içeren ortak nihai alan uzunluğu, uzunluk pozitif veya sıfır olabilir). "
Michael Myers

19

Ayrıca, çok boyutlu bir Array'ınız varsa, sorguladığınız diziye uygun eksene / tuple / boyuta ulaşana kadar yalnızca '[0]' ekleyerek ilgili boyutu alabileceğinizi belirtmek de yararlı olacaktır.

Bu muhtemelen aşağıdaki kodla daha iyi açıklanabilir:

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
    }

}

Hangi çıktıyı üretir:

5
12

15

array.length nihai özelliği

kamu ve nihai mülkiyettir. Bu son çünkü Java dizileri boyutlarına göre değişmez (ancak elemanın değerine göre değişebilir)


14

Diziler nesnedir ve uzunluk alanı vardır.

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

haha.length 2 olur


Sadece nitpick için. Ancak dizilerin Java nesneleri OLMADIĞINA inanıyorum - değişkenlerin iki referans türünden biri. Diğeri nesneler.
jabbie

2
@jabbie: Gerçekten mi? Bunun için bir referansınız var mı? Sadece Object o = new String [] {"merhaba"} diyebildiğiniz için soruyorum;
Simon Nickerson

simon, ifadenin çalışmasının sebebinin, tüm ilkel türler için refleksif sınıfları tanıtmasıdır.
Brian Sweeney

9
Docs.oracle.com/javase/specs/jls/se8/html/jls-10.html'nin ilk cümlesini okuyun ve dizilerin nesne olmadığını söylemeyi deneyin. ;)
Michael Myers

1
başka bir değişken adı kullanabilirdiniz, bu benim için çok dikkat dağıtıcı
Space Rocker

11

Java'da lengthboyutunu bulmak için herhangi bir dizide kullanabileceğiniz bir alan vardır:

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

1
ne olabileceği veya olmayabileceği ile ilgili tekniklere girmediğiniz ve sadece kısa ve öz bir cevap verdiğiniz için teşekkür ederiz. Sizin için +1. :)
Joshua Burns

9

Bir işlevin bunu yapmasını istiyorsanız

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

İnt [], byte [] veya Object [] gibi ne tür bir diziniz olduğunu bilmiyorsanız bu yararlı olabilir.


6

Uzunluğu arasında bir fark vardır Stringve arrayaçıklığa kavuşturmak için:

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

Açıklama ise bu soruda güncellenmelidir.
Whitecat

5

Cevap "Hepsi". Bir java dizisi, sabit sayıda eleman yuvasıyla ayrılır. "Length" özelliği size kaç tane olduğunu söyleyecektir. Bu sayı dizinin ömrü boyunca değişmez. Yeniden boyutlandırılabilir bir eşdeğer için, kaç öğenin kullanımda olduğunu bulmak için size () yöntemini kullanabileceğiniz java.util.List sınıflarından birine ihtiyacınız vardır.

Ancak, "Kullanımda" ve sonra Kullanımda . Bir sınıf nesnesi dizisinde, elemanları null nesneler olan eleman yuvalarına sahip olabilirsiniz, bu nedenle length özniteliğinde sayılsalar da, çoğu insanın tanımları kullanılmazlar (uygulamaya bağlı olarak YMMV). Boş / boş olmayan sayıları döndürmek için yerleşik işlev yoktur.

Liste nesnelerinin başka bir "Kullanımda" tanımı vardır. Altta yatan depolama yapılarının aşırı yaratılmasını / yok edilmesini önlemek için, bu sınıflarda genellikle bir miktar dolgu vardır. Dahili olarak kullanılır, ancak döndürülen boyut () yönteminde sayılmaz. Ayrıca, listeyi genişletmeden bu öğelere erişmeyi denerseniz (ekleme yöntemleri aracılığıyla), geçersiz bir dizin istisnası alırsınız.

Listeler için, null olmayan, işlenmiş öğeler, Taahhüt edilen tüm öğeler (null öğeler dahil) veya şu anda ayrılan genişletme alanı da dahil olmak üzere Tüm öğeler için "Kullanımda" seçeneğine sahip olabilirsiniz.


2

Yukarıdaki tüm cevaplar doğru. Gözlemlenecek önemli şey, dizilerin uzunluk özelliğine sahip olması ancak uzunluk yönteminin olmamasıdır. Java'da dizeler ve diziler kullandığınızda karşılaşabileceğiniz üç temel model şunlardır:

  1. String s = new String ("vidyasagar");
    System.out.println (s.length ()); // Bu durumda sadece String kullanıyoruz. Dizeler için uzunluk özelliği yok. length () yöntemini kullanmalıyız.
  2. int [] s = yeni int [10]; System.out.println (s.length); // burada dizilerin uzunluk özelliğini kullanıyoruz.
  3. Dize [] s = yeni Dize [10];
    System.out.println (s.length); // Burada veri türü Dize olsa da, tek bir Dize değildir. s, Dizeler dizisi için bir referanstır. Bu nedenle, diziye kaç dizenin sığabileceğini ifade etmek için dizilerin length özelliğini kullanırız.

1

Sorunuzun cevabı gerçekten değil, ama büyüyüp küçülebilen bir dizi gibi bir şey istiyorsanız, java'da bir dizi kullanmamalısınız. Muhtemelen en iyisi ArrayList veya başka bir List uygulamasını kullanmaktır.

Daha sonra boyutunu almak için boyut () 'ı çağırabilirsiniz.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.