2D java dizisi. Java Dizisi. Java'da diziler. Yeni başlayanlar için Java

  • 21.07.2019
  • öğretici

İlk işlerine (pre) junior programcı olarak başvururken ilk görüşmelerine hazırlanan çok az kişinin bu soruyu olumsuz yanıtlayacağını düşünüyorum. Ya da en azından cevaptan şüphe et. Tabii ki, doğrudan indeks erişimi olan bu kadar basit bir veri yapısı - hile yok! Hayır, JavaScript veya PHP gibi bazı dillerde diziler elbette çok ilginç bir şekilde uygulanır ve aslında bir diziden çok daha fazlasıdır. Ancak bu bununla ilgili değil, dizilerin "sağlam bir bellek parçası" biçiminde "geleneksel" uygulanmasıyla ilgili. Bu durumda, indekslere ve bir elemanın boyutuna göre adres basitçe hesaplanır ve karşılık gelen değere erişilir. Bu kadar zor olan ne?
Anlayalım. Örneğin, Java'da. Şüphelenmeyen başvuru sahibinden bir tamsayı dizisi oluşturmasını istemek n x n. Bir kişi güvenle şu satırlar boyunca bir şeyler yazar:
int g = yeni int[n][n];
Harika. Şimdi sizden dizinin öğelerini bir şeyle başlatmanızı istiyoruz. Birimler olsa da, endekslerin toplamı olsa da. Alırız:
for(int ben = 0; ben< n; i++) { for(int j = 0; j < n; j++) { g[i][j] = i + j; } }
Daha sık yazıyorlar
for(int ben = 0; ben< g.length; i++) { for(int j = 0; j < g[i].length; j++) { g[i][j] = i + j; } }
bu da sohbet için bir fırsat, ama şimdi başka bir şeyden bahsediyoruz. Bir kişinin ne bildiğini ve nasıl düşündüğünü bulmaya çalışıyoruz. Bu nedenle, değerlerin simetrik olarak düzenlendiği gerçeğine dikkat çekiyor ve ondan döngülerin yinelemelerinden tasarruf etmesini istiyoruz. Tabii ki, sadece alt üçgenden geçebilecekken neden tüm indeks değerlerini geçesiniz? Konu genellikle kolayca kabul eder ve ana köşegeni akıllıca vurgulayarak aşağıdaki satırlar boyunca özenle bir şeyler yazar:
for(int ben = 0; ben< n; i++) { g[i][i] = 2* i; for(int j = 0; j < i; j++) { g[j][i] = g[i][j] = i + j; } }
g[i][i] = 2* yerine i; genellikle g[i][i] = i + i yazın; veya g[i][i] = ben<< 1; и это тоже повод поговорить. Но мы идем дальше и задаем ключевой вопрос: Program ne kadar hızlı çalışacak?. Genel mantık şu şekildedir: neredeyse 2 kat daha az endeks hesaplaması; değerlerin hesaplanmasından neredeyse 2 kat daha az (toplam); aynı sayıda atama. Yüzde 30 daha hızlı demektir.Bir kişinin arkasında iyi bir matematik okulu varsa, o zaman kaydedilen işlemlerin tam sayısını ve optimizasyon verimliliğinin daha mantıklı bir değerlendirmesini bile görebilirsiniz.
Şimdi ana saldırı zamanı. Kodun her iki sürümünü de yeterince büyük bir değerde çalıştırıyoruz n(birkaç bin mertebesinde), örneğin, bunun gibi.

Zaman kontrollü kod

A sınıfı ( public static void main(String args) ( int n = 8000; int g = yeni int[n][n]; uzun st, en; // bir st = System.nanoTime(); for(int i = 0 ben< n; i++) { for(int j = 0; j < n; j++) { g[i][j] = i + j; } } en = System.nanoTime(); System.out.println("\nOne time " + (en - st)/1000000.d + " msc"); // two st = System.nanoTime(); for(int i = 0; i < n; i++) { g[i][i] = i + i; for(int j = 0; j < i; j++) { g[j][i] = g[i][j] = i + j; } } en = System.nanoTime(); System.out.println("\nTwo time " + (en - st)/1000000.d + " msc"); } }


Ne görüyoruz? Optimize edilmiş sürüm 10-100 kat daha yavaş çalışır! Şimdi pozisyon için başvuranın tepkisini gözlemleme zamanı. Alışılmadık (veya geliştiricinin uygulamasında oldukça yaygın) stresli bir duruma tepki ne olacak. Müşterinin yüzünde heyecan belirdiyse ve düğmelere basmaya başladıysa, varlığınızı geçici olarak unutursa, bu iyi bir işarettir. Bir ölçüde. Projenin sonucunu umursamayan bir araştırmacıyı işe almak istemezsiniz, değil mi? O zaman ona "Neden?" Sorusunu sormayın. İkinci seçeneği yeniden oluşturmayı isteyin, böylece ilkinden daha hızlı çalışır.
Artık bir süreliğine güvenle işinize devam edebilirsiniz. Yarım saat içinde, başvuranın temel kişisel ve mesleki niteliklerini değerlendirmek için yeterli materyale sahip olacaksınız.
Bu arada, çalışma sitemde bu sorunu kısaca anlattığımda en popüler yorum "Bu senin Java eğrin." oldu. Özellikle onlar için kodu Great and Free olarak yayınlıyorum. Ve Windows için Free Pascal'ın mutlu sahipleri bakabilir

spoiler altında

program Zamanı; Windows'u kullanır; var start, bitiş, res: int64; n, i, j: Tamsayı; g: Tamsayı Dizisi Dizisi; başlangıç:= 10000; SetLength(g, n, n); QueryPerformanceFrequency(res); QueryPerformanceCounter(başlangıç); i:=1 ila n-1 için j:=1 ila n-1 için do g := i + j; QueryPerformanceCounter(bitiş); writeln("Satırlara göre süre:", (bitiş - başlangıç) / res, "sn"); QueryPerformanceCounter(başlangıç); i:=1 ila n-1 için j:=1 ila n-1 için do g := i + j; QueryPerformanceCounter(bitiş); writeln("Sütunlara göre süre:", (bitiş - başlangıç) / res, "sn"); son.


Pascal'daki yukarıdaki kodda "kafa karıştırıcı" anları kaldırdım ve sadece sorunun özünü bıraktım. Sorun denilebilirse.
Davalıya hangi soruları soracağız?
1. Neden yavaşladı? Ve daha detaylı...
2. Başlatma nasıl daha hızlı yapılır?

Java uygulamasının daha derinine inmeye ihtiyaç varsa, başvuru sahibinden küçük değerler için yürütme süresini gözlemlemesini isteriz. n. Örneğin, ideone.com'da n=117 için "optimize edilmiş" sürüm iki kat daha yavaştır. Ancak bir sonraki değer n=118 için, optimize edilmemiş olandan 100 (yüz) kat daha hızlı olduğu ortaya çıktı! Yerel bir makinede deneme yapmayı önerin. Ayarlarla oynamasına izin verin.
Bu arada, neler olduğunu anlıyor musun?

Birkaç haklı söz

İşe alırken bu görüşme yönteminin gerekçesi olarak birkaç söz söylemek istiyorum. Evet, dilin sözdizimi bilgisini ve veri yapılarının bilgisini test etmiyorum. Belki de medeni bir işgücü piyasasında bunların hepsi işe yarar. Ancak kalifiye eleman sıkıntısının olduğu bizim koşullarımızda, başvuranın karşılaşacağı iş için ileriye dönük yeterliliğini değerlendirmek gerekir. Şunlar. öğrenme, üstesinden gelme, anlama, yapma yeteneği.
Özünde bu, eski Roma'da lejyonerleri işe alırken yapılan "röportaj"a benzer. Geleceğin savaşçısı çok korktu ve kızarıp kızarmadığını izledi. Soluklaşırsa, stresli bir durumda başvuranın kanı başından çekilir ve pasif bir reaksiyona eğilimlidir. Örneğin, bayılma. Başvuran kızarırsa, kan kafasına hücum eder. Şunlar. aktif eylemlere, kavgaya koşmaya eğilimlidir. Bu uygun görüldü.
Sonuncusu. Röportajlarda kullanmaya devam etmek yerine neden herkese bu sorunu anlattım? Basitçe, potansiyel adaylar bu görevi zaten “öğrendiler” ve diğerleri bunu kullanmak zorunda.
Aslında bu etkiye tam olarak görüntü işlemenin gerçek görevi ile bağlantılı olarak dikkat ettim. Durum biraz kafa karıştırıcıydı ve yeniden düzenlemeden sonra fps'min neden bu kadar düştüğünü hemen anlamadım. Genel olarak, herkesin muhtemelen böyle harika anları vardır.

Şimdiye kadar, önde gelen sürüm, işlemci önbelleğinin “suçlu” olmasıdır. Şunlar. İlk varyanttaki sıralı erişim, belirli bir sınırı geçerken güncellenen karma içinde çalışır. Sütunlarla erişirken, hash'in sürekli güncellenmesi gerekir ve bu uzun zaman alır. Bu sürümü en saf haliyle test edelim. Bir dizi başlatalım ve daha hızlı olanı karşılaştıralım - bir satırdaki tüm öğeleri işlemek mi yoksa dizi öğelerini aynı sayıda rastgele bir sayıyla işlemek mi? İşte program - ideone.com/tMaR2S. 100.000 dizi öğesi için rastgele erişim genellikle belirgin şekilde daha hızlıdır. Ne anlama geliyor?
Burada oldukça haklı olarak (Big_Lebowski) döngüleri yeniden düzenlemenin sonuçları sıralı bir seçenek lehine değiştirdiğine dikkat çektim. Deneyin saflığı için ısınma için bir döngü koymak zorunda kaldım. Aynı zamanda leventov'un tavsiye ettiği şekilde ortalama çalışma süresini göstermek için birkaç tekrar yaptım. Bu ideone.com/yN1H4g gibi çıktı. Şunlar. büyük bir dizinin öğelerine rastgele erişim, sıralı erişimden ~%10 daha yavaştır. Belki önbellek aslında bir rol oynayabilir. Ancak, ilk durumda, performans zaman zaman düştü. Yani başka bir şey var.

Yavaş yavaş, dizinin bir satırından diğerine geçerken ek eylemlerle ilgili sürüm lider oluyor. Ve doğru. Orada tam olarak ne olduğunu anlamaya devam ediyor.

Etiketler: Etiketler ekle

Tek boyutlu dizilerin nasıl oluşturulacağını öğrendik. Benzer şekilde Java'da iki boyutlu, üç boyutlu, dört boyutlu... çok boyutlu diziler Java'da çok boyutlu bir dizi, aslında bir dizi dizisidir.

Bu tür dizilerin kullanımının popüler bir örneği, iki boyutlu dizilerle temsil edilen matrislerdir. Peki, matris nedir ve Java'da iki boyutlu bir dizi kullanarak nasıl temsil edilir.

Java'da matrisler ve iki boyutlu diziler

Bir matris, kesişme noktalarında öğeleri olan satır ve sütunlardan oluşan dikdörtgen bir tablodur. Bir matrisin satır ve sütun sayısı onun boyutunu belirler.

Matris boyutunun genel görünümü m x n(m - satır sayısı, n- sütun sayısı) , aşağıdaki gibi:

Matrisin her bir elemanının kendi indeksi vardır, burada ilk basamak elemanın bulunduğu satırın numarasını, ikincisi ise sütunun numarasını gösterir.

Belirli matrislerin örneklerine bakalım ve bunları Java kullanarak oluşturalım.

Matris A 2'ye 3 (2 satır, 3 sütun) boyutuna sahiptir. Bu boyutun iki boyutlu bir dizisini oluşturalım:

int matrisA; matrixA = yeni int ;

İki boyutlu bir tamsayı dizisi (bu durumda matris tamsayılar içerdiğinden) ve bunun için ayrılmış bellek ilan ettik. Bunu yapmak için 2 dizin kullandık: ilk dizin satırı ve boyutunu tanımlar, ikinci dizin sütunu ve boyutunu tanımlar.

İki boyutlu bir dizinin öğelerine erişmek için 2 dizin kullanmalısınız: ilki satır için, ikincisi sütun için. Tek boyutlu dizilerde olduğu gibi, dizinler de sıfırdan başlar. Bu nedenle tablodaki satır ve sütunların numaralandırılması 0'dan başlar.

MatrisA=1; matrisA = -2; matrisA = 3; matrisA = 4; matrisA = 1; matrisA = 7;

Matrisi konsolda görüntülemek için tüm öğeleri iki döngü kullanarak gözden geçirmeniz gerekir. Dizinin öğelerinden geçerken döngü sayısı, boyutuna eşittir. Bizim durumumuzda, ilk döngü satırlarda, ikinci - sütunlarda gerçekleştirilir.

(int i = 0; i için< 2; i++) { for (int j = 0; j < 3; j++) { System.out.print(matrixA[i][j] + "\t"); } System.out.println(); }

Yani ilk önce ilk satırın tüm öğelerini "\t" sekme karakteriyle ayırarak görüntülüyoruz, satırı aktarıyoruz ve ikinci satırın tüm öğelerini görüntülüyoruz.

Matris için tam kod ANCAK aşağıdaki gibi:

Genel sınıf Matrix ( public static void main(String args) ( int matrixA; matrixA = yeni int; matrixA = 1; matrixA = -2; matrixA = 3; matrixA = 4; matrixA = 1; matrixA = 7; for (int i) = 0; ben< 2; i++) { for (int j = 0; j < 3; j++) { System.out.print(matrixA[i][j] + "\t"); } System.out.println(); } } }

matris için B hadi kullanalım basitleştirilmiş başlatma yolu- duyuru sırasında. Tek boyutlu dizilere benzeterek.

Int matrisB = ( (-9,1,0), (4,1,1), (-2,2,-1) );

Dizinin her satırı bir çift kaşlı ayraç içine alınmalı ve birbirinden virgülle ayrılmalıdır.

Matris için tam kod B:

Genel sınıf Matrisi ( public static void main(String args) ( int matrixB = ( (-9,1,0), (4,1,1), (-2,2,-1)); for (int i = 0 ben< 3; i++) { for (int j = 0; j < 3; j++) { System.out.print(matrixB[i][j] + "\t"); } System.out.println(); } } }

Düşünmek döngü başlatmaörnek olarak çarpım tablosunu kullanan iki boyutlu bir dizi için.

Genel sınıf Mult ( public static void main(String args) ( // 10'a 10'a iki boyutlu bir dizi oluşturun int multipleTab = new int; // (int i = 0; i) için ilk boyut boyunca döngü yapın< 10; i++) { // цикл по второй размерности for (int j = 0; j < 10; j++) { //инициализация элементов массива multiplyTab[i][j] = (i+1)*(j+1); //вывод элементов массива System.out.print(multiplyTab[i][j] + "\t"); } System.out.println(); } } }

Burada, çarpım tablosunun değerleri ile elemanların başlatılması, bir döngüde konsola çıktıları ile birleştirilir.

Çok boyutlu ve asimetrik diziler.

Java'da çok boyutlu diziler benzer şekilde oluşturulur. Köşeli parantezlerin sayısı boyutu belirtir.
Sabit uzunlukta diziler oluşturma örnekleri:

Int a = yeni int;// iki boyutlu dizi int b = yeni int;// üç boyutlu dizi int c = yeni int;// dört boyutlu dizi // vb.

Ancak, başlangıçta tüm düzeylerde boyutu belirtmek gerekli değildir, boyutu yalnızca ilk düzeyde belirtebilirsiniz.

int a1 = new int;// 5 satırlı iki boyutlu dizi

Bu durumda her satırda kaç eleman olacağı bilinmezken bu daha sonra belirlenebilir ayrıca dizi her satırda farklı sayıda eleman içerebilir, yani asimetrik. a1 dizisi için her satırdaki eleman sayısını belirleyelim.

A1 = yeni int ; a1 = yeni int ; a1 = yeni int ; a1 = yeni int ; a1 = yeni int ;

Sonuç olarak, ekranda görüntülendiğinde,

for(int ben = 0; ben

dizi şöyle görünecek:

0
0 0
0 0 0
0 0 0 0
0 0 0 0 0

Bir dizi oluşturulduğunda, öğeleri otomatik olarak sıfıra başlatılır, bu nedenle bu örnekte sıfırlar görüntülenir.

Java'da çok boyutlu diziler üzerinde alıştırmalar:

  1. 5'e 6'lık bir dizi oluşturun ve onu rastgele sayılarla (0 ile 99 arasında değişen) doldurun. Üçüncü satırı konsola yazdır
  2. C ve D matrisleri 3'e 3 boyutlarında verilir ve 0'dan 99'a kadar rastgele sayılarla doldurulur. Matrislerin birbirleri üzerinde önce toplamasını, sonra çarpmasını ayrı ayrı gerçekleştirin. Orijinal matrisleri ve hesaplamaların sonucunu konsola çıkarın.
  3. İki boyutlu bir dizinin tüm öğelerini toplayın.
  4. Negatif ve pozitif sayılar içeren iki boyutlu bir dizi verildi. Negatif sayılar içeren dizi hücrelerinin numaralarını görüntüleyin.
  5. Öğeleri artan düzende iki boyutlu dizi satırlarında sıralayın

1. Diziler nedir?

Bu, hemen hemen her programlama dilinde var olan ve aynı türden bir grup nesneyi ortak bir ad kullanarak tanımlamanıza izin veren özel bir yapıdır.

Beş kedili evsiz bir hayvan barınağınız olduğunu hayal edin. Her birinin adını hatırlamıyorsunuz, ancak herkesin, her bir hayvanı tanımlamanıza izin veren bir numarası olan bir jetonu var. Bunun beş boyutlu "kediler" dizisi olduğunu söyleyebiliriz. Lütfen indekslemenin sıfırdan başladığını unutmayın - bu Java'daki özeldir. Diziler oluşturmak mümkün olmasaydı, beş değişken bildirmeniz ve onlar için çok uygun olmayan isimler bulmanız gerekirdi.

Java'da herhangi bir boyutta diziler oluşturabilirsiniz - tek boyutlu, iki boyutlu, üç boyutlu vb. En basit seçenekle başlayalım - tek boyutlu dizilerle.

2. Tek boyutlu diziler

Tek boyutlu diziler, aynı türdeki değişkenlerin bir listesidir. Bir dizi oluşturmak için önce gerekli türde bir dizi değişkeni bildirmeniz gerekir. Tek boyutlu bir dizi bildirmenin genel biçimi aşağıdaki gibidir:

DeğişkenAdı yazın;

nerede parametre bir çeşit temel tür olarak da adlandırılan dizi öğesi türünü belirtir.

Örnek 1. Dizi bildirimi örneği

Köşeli parantezler bir değişkenden önce veya sonra yerleştirilebilir. Ancak daha doğru bir seçenek, parantezleri değişkenden önce belirtmektir - bu şekilde tür ve parantezler aynı yerdedir, bu da bir bakışta şöyle ve böyle bir diziniz olduğunu anlamanıza olanak tanır.

Int ayGünler; çift ​​aylık Maaşlar;

2.1. Bir diziyi bir anahtar kelimeyle başlatma yeni

Bir dizi bildirildiğinde, onun için henüz bir bellek ayrılmamıştır. Anahtar kelime, bir dizi için bellek ayırmak için kullanılır. yeni, bundan sonra dizinin türü tekrar belirtilir ve köşeli parantez içinde boyut:

DeğişkenAdı = yeni tür[boyut];

Bir dizi, bir satırla bildirilebilir ve başlatılabilir:

int değerleri = yeni int;

Örnek 2. Dizi bildirimi örneği

Bir dizi türü bildirme örneğini düşünün int bu örnekte 12 beden. satırı çalıştırdıktan sonra int ayGünleri = yeni int 12 elemanlı bir dizi oluşturulur. Her öğeye, verilen tür için varsayılan bir değer atanır. tipi için int sıfır. Tek bir dizi elemanına atıfta bulunmak için, köşeli parantez içindeki dizi adından sonra eleman indeksini belirtin. Böylece, değerini değiştirmek veya almak için bir dizi elemanına başvurabiliriz.

Genel sınıf Array1 ( public static void main(String args) ( int ayDays = yeni int; ayDays = 31; ayDays = 28; ayDays = 31; ayDays = 30; ayDays = 31; ayDays = 30; ayDays = 31; ayDays = 31 ; ayDays = 30; ayDays = 31; ayDays = 30; ayDays = 31; System.out.println("Nisan ayında " + ayGünleri + "günler."); ) )

2.2. Bir diziyi başlatma bloğuyla başlatma

Örnek 3. Tek Boyutlu Dizi Başlatma Örneği

Her bir dizi elemanının değerleri önceden biliniyorsa, diziyi başlatmak için bir blok kullanılabilir. Onun yerine yeni int, dizi öğelerinin değerleri virgülle ayrılmış küme parantezleri içinde listelenir. Dizinin boyutu, derleyici tarafından belirtilen eleman sayısından çıkarılır.

Genel sınıf Array2 ( public static void main(String args) ( int ayDays = (31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31); System.out.println("B Nisan " + ayGünleri + " günler."); ))

2.3. isimsiz dizi

Üçüncü bir dizi bildirimi biçimi de vardır - adsız bir dizi. İki durumda kullanılabilir. İlk olarak - diziyi bildirdiniz ve başlattınız test sonuçları dört beden , ama sonra bir nedenden dolayı değiştirilmesi gerekiyor - üç öğe içermesi gerekiyor. Bir diziyi başlatmak için formu yeniden kullanamazsınız - bir derleme hatası olacaktır:

Int testScores = (1, 2, 3, 4); ... testScores = (4, 7, 2); //Derleme hatası

Ancak, bellekte yeni bir dizi oluşturacak adsız bir dizi kullanabilirsiniz. Adsız bir dizi yazma biçimi, ilk ikisinin karışımıdır:

TestScores = new int(4, 7, 2);

Adsız bir dizi için ikinci kullanım durumu, bir diziyi bir yönteme geçirmektir. Aşağıdaki örnekte, yöntem Yazdır bir dizi türü kabul eder int. Bir metodu çağırırken, isimsiz bir diziyi argüman olarak iletebilirsiniz.

Örnek 4: Adsız bir dizi örneği

public class Array3 ( public static void main(String args) ( int testScores = (1, 2, 3, 4); for (int element: testScores) ( System.out.print(element + " "); ) System.out .println(); testScores = new int(4, 7, 2); for (int öğesi: testScores) ( System.out.print(element + " "); ) System.out.println(); print(yeni int (4, 6, 2, 3)); ) public static void print(int dizisi) ( for (int element: array) ( System.out.print(element + " "); ) ) )

3. Çok boyutlu diziler

Çok boyutlu diziler, dizi dizileridir.

Çok boyutlu bir dizi değişkeni bildirirken, her bir ek dizini belirtmek için ayrı bir köşeli parantez satırı kullanılır. Örneğin:

int ikiD = yeni int;

Aşağıdaki şekil, iki boyutlu bir 4'e 5 dizinin nasıl görselleştirilebileceğini göstermektedir.Sol indeks, satırı ve sağ sütunu tanımlar.

Örnek 5. 2B dizi örneği

Aşağıdaki örnek, 4x5 iki boyutlu bir diziye değerlerin nasıl ayarlanacağını gösterir. Satırlar arasında döngü yapmak için bir dış döngü kullanılır. için, yinelenen sütunlar için - dahili. Sonraki her öğeye bir öncekinden bir fazla değer atanır.

Genel sınıf TwoDArray1 ( public static void main(String args) ( int ikiD = yeni int; int i, j, k = 0; for (i = 0; i)< 4; i++) { for (j = 0; j < 5; j++) { twoD[i][j] = k++; System.out.print(twoD[i][j] + " "); } System.out.println(); } } }

3.2 Çok boyutlu bir dizinin bellekte gösterimi

Şimdi dizinin nasıl temsil edildiğini düşünün int ikiD = yeni int; bellekte.Değişken ikiD bir matrise değil, üç elemandan oluşan bir satıra (kırmızı) işaret eder. Her öğenin değeri, dört öğeden (mor) oluşan bir dizeye referanstır.

Aşağıdaki resim, bir 3B dizinin nasıl saklandığını gösterir. int üçD = yeni int akılda:

Benzer şekilde, herhangi bir boyutta bir dizi bellekte saklanabilir.

Şimdiye kadar incelediğimiz iki boyutlu dizilerde, her satırdaki eleman sayısı aynıdır - çoğu zaman aynıdır. Ancak bu gerekli değildir, her satır farklı sayıda öğe içerebilir. Örneğin:

Örnek 6. Farklı boyutlara sahip iki boyutlu bir dizi örneği

Böyle bir diziyi uygulayan koda bakalım. Bir dizi bildirirken, yalnızca ilk boyut için öğe sayısını belirtmelisiniz - int dizisi = yeni int. Böylece dizideki satır sayısını belirtiyoruz, ancak her satır için bellek ayırmıyoruz. Ardından, dizinin her satırı için ayrı bellek ayırın. Örneğin, indeksi sıfır olan bir dize 1 boyutunda olacaktır - dizi = yeni int.

Genel sınıf TwoDArray2 ( public static void main(String args) ( int dizi = yeni int; dizi = yeni int; dizi = yeni int; dizi = yeni int; dizi = yeni int; int i, j, k = 0; for ( ben = 0 ben< 4; i++) { for (j = 0; j < i + 1; j++) { array[i][j] = k++; System.out.print(array[i][j] + " "); } System.out.println(); } } }

3.4. Çok boyutlu bir diziyi başlatmak için blok

Örnek 7. İki boyutlu bir diziyi başlatma

Çok boyutlu diziler için, tüm öğelerin değerleri önceden biliniyorsa, başlatma için bir blok da kullanabilirsiniz. Her bir satır, küme parantezleri içine alınır:

Genel sınıf TwoDarray3 ( public static void main(String args) ( double arrayTwoD = ( (0, 1, 2, 3)), (4, 5, 6, 7), (8, 9, 10, 11), (12, 13, 14, 15) ); for (double arrayOneD: arrayTwoD) ( for (double element: arrayOneD) ( System.out.print(element + " "); ) System.out.println(); ) ) )

3.4. Dizi Uzunluğu

Örnek 8: Bir dizinin uzunluğunu alma

Aşağıdaki örnek, bir dizinin uzunluğunun nasıl alınacağını gösterir. Bunu yapmak için değişkeni kullanın uzunluk. Tek boyutlu bir dizide her şey açıktır - uzunluğu, öğelerinin sayısıdır. Çok boyutlu bir dizinin uzunluğu, ilk boyutundaki öğelerin sayısıdır. Örneğin, bir dizinin uzunluğu dizi2 2'dir. Ayrıca dizideki her satırın uzunluğunu da alabilirsiniz. Örneğin, dizi2.uzunluk- dizindeki öğelerin sayısını sıfır dizine sahip olarak döndürür.

Genel sınıf ArraySize ( public static void main(String args) ( int dizi1 = (1, 2, 3, 4); int dizi2 = ((1, 1, 1), (2, 2, 2)); System.out .println("Dizi1'in boyutu = " + dizi1.uzunluk); System.out.println("Dizi2'nin boyutu = " + dizi2.uzunluk); System.out.println("1 dizi dizi2'nin boyutu = " + dizi2 .uzunluk); ))

Yürütme sonucu:

dizi1 dizi boyutu = 4 dizi2 dizi boyutu = 2 dizi2 dizi 1-satır boyutu = 3

4. Dizilerle çalışırken faydalı yöntemler

Dizilerle çalışırken yararlı olan birkaç yöntem vardır. Onları düşünün:

4.1. Yöntem Diziler.toString()

Yöntem, öğeleri virgülle ayırarak tek boyutlu bir dizinin dize temsilini döndürür. Diziler arasında döngü yapmak yerine için, örnek 4'te yaptığımız gibi, öğeleri konsola yazdırmak için bu yöntemi kullanabilirsiniz:

Örnek 9. Yöntemin uygulanması Diziler.toString()

java.util.Arrays'i içe aktarın; public class ArraysToStringDemo ( public static void main(String args) ( int dizi = (1, 4, 6, 3, 8); System.out.println(Arrays.toString(array)); ) )

4.2. Yöntem Arrays.deepToString()

Yöntem, dizeleri köşeli parantezlerle sınırlayarak çok boyutlu bir dizinin dize temsilini döndürür:

Örnek 10. Yöntemin uygulanması Arrays.deepToString()

java.util.Arrays'i içe aktarın; public class ArraysDeepToStringDemo ( public static void main(String args) ( Dize dizisi = ("bir-bir", "bir-iki", "bir-üç"), ("iki-bir", "iki-iki", "iki-üç")); System.out.println(Arrays.deepToString(dizi)); ) )

4.3. Yöntem Diziler.sort()

Yöntem Diziler.sort() sayısal bir dizinin öğelerini artan düzende sıralar:

Örnek 11 Bir diziyi sıralama

java.util.Arrays'i içe aktarın; public class ArraysSort1 ( public static void main(String args) ( int dizi = yeni int(3, 1, 5, 6, 8); Arrays.sort(dizi); System.out.println(Arrays.toString(dizi)) ; ))

4.4. Yöntem Arrays.binarySearch()

Yöntem Arrays.binarySearch() dizide verilen değeri arar ve eleman numarasını döndürür. Gerekli eleman bulunamazsa, döner -(konum + 1), nerede durum- öğenin OLABİLECEK konumu. Dizi sıralanmalıdır, aksi takdirde yöntem çağrısının sonucu tanımsız olacaktır:

Örnek 12: Bir Dizi Elemanı Bulma

java.util.Arrays'i içe aktarın; genel sınıf BinarySearch1 ( public static void main(String args) ( int dizi1 = (10, 20, 30, 40); int konum1 = Arrays.binarySearch(dizi1, 20); int konum2 = Arrays.binarySearch(dizi1, 25); System.out.println(pos1); System.out.println(pos2); )

Yürütme sonucu:

4.5. Yöntem Sistem.dizikopyası()

Yöntem Sistem.dizikopyası() bir dizinin bir kısmını başka bir diziye kopyalamanıza izin verir.

Örnek 13: Bir diziyi kopyalama

Bir diziden 2,3,4 öğelerini kopyalayan bir örnek düşünün diziKaynak bir diziye diziHedef:

Java.util.Arrays'i içe aktarın; public class ArrayCopy1 ( public static void main(String args) ( int arraySource = (1, 2, 3, 4, 5, 6); int arrayDestination = (0, 0, 0, 0, 0, 0, 0, 0, 0) ; System.out.println("arraySource: " + Arrays.toString(arraySource)); System.out.println("arrayDestination: " + Arrays.toString(arrayDestination)); System.arraycopy(arraySource, 1, arrayDestination, 2 , 3); System.out.println("arrayDestination'dan sonra arrayCopy: " + Arrays.toString(arrayDestination)); ) )

Yürütme sonucu:

ArraySource: arrayDestination: arrayCopy'den sonra arrayDestination:

Örnek 14. Bir diziyi kendisinden kendisine kopyalamak

Üst üste binen alanlar ile aynı diziye kopyalayabilirsiniz:

Java.util.Arrays'i içe aktarın; public class ArrayCopy2 ( public static void main(String args) ( int dizi = (1, 2, 3, 4, 5, 6, 7, 8); System.out.println(Arrays.toString(dizi)); System. arraycopy(array, 1, array, 3, 3);System.out.println(Arrays.toString(array)); ) )

Yürütme sonucu:

Java'da çok boyutlu diziler

Örneğin, Java'da iki boyutlu bir dizi düşünün.

Java 2D dizileri, dikdörtgen veya dikdörtgen olmayan bir sayı tablosudur.

İki boyutlu bir Java dizisi satır ve sütunlardan oluşur.

İki boyutlu bir Java dizisinin ilk dizini satır sayısıdır.

Java 2D Dikdörtgen Dizi Örneği:

intmultyArr; multiArr = yeni int; /* * çokluArr yapısı * | (0,0) | (0,1) | * | (1.0) | (1,1) | */

Burada, iki satır ve iki sütuna sahip iki boyutlu bir dizi bildirilir ve tanımlanır.

Diziyi öğelerle yükleyelim:

ÇokluArr = 1; çokluArr = 2; çokluArr = 3; çokluArr = 4;

İki boyutlu bir dizinin çıktısı (dizi üzerinde yineleme):

System.out.println("multyArr"); for(int han = 0; han< 2; inn++) { for(int jnn = 0; jnn < 2; jnn++) { System.out.println("multyArr[" + inn + "][" + jnn + "] = " + multyArr ); } }

Alırız:

for(int han = 0; han< 2; inn++)

satırlardan geçiyoruz ve döngüde

for(int jnn = 0; jnn< 2; jnn++)

sütunlar tarafından.

Çok boyutlu bir diziyi aynı anda bildirebilir ve tanımlayabilirsiniz:

intmultyArr = ((1,2), (3,4));

Java'da çok boyutlu dizinin uzunluğu

Int çokluArr = ((1,2), (3,4), (5,6)); /* * çokluArr yapısı * | 1 | 2 | * | 3 | 4 | * | 5 | 6 | */ System.out.println("Dizi uzunluğu = " + multyArr.length);

Dizi uzunluğu = 3

Her biri iki öğeden oluşan üç sıra vardır. İlk boyut, iki boyutlu dizinin uzunluğu olan üçtür.

Java'da 3B dizi

Java'da bir 3B dizi örneği:

int triArray;
triArray = yeni int;

Burada üç boyutlu bir dizi bildirilir ve tanımlanır. İki katmandan (katman) oluşan bir küp olarak temsil edilebilir, her katman iki satır ve iki sütundan oluşur, yani. her katman iki boyutlu bir dizidir.

3B dizi nasıl doldurulur? Bir döngüde mümkündür, ancak örneğin manuel olarak dolduracağız:

//******************** //BİRİNCİ KATMAN //******************** / /ilk katmanın ilk satırı triArray = 1; triArray = 2; //ilk katmanın ikinci satırı triArray = 3; triArray = 4; //******************** //İKİNCİ KATMAN //******************** / /ikinci katmanın ilk satırı triArray = 5; triArray = 6; //ikinci katmanın ikinci satırı triArray = 7; triArray = 8;

3B dizi çıktısı nasıl alınır? Veya bir 3B dizi üzerinde nasıl yineleme yapılır? Yani.