"Amigo, umarım dizilerin programlamada ne kadar yararlı olduğunu şimdiye kadar anlamışsındır?"

"Kesinlikle Rishi! Zaten birden fazla görevi çözdüm."

"Görevlerinizde tekrar eden eylemler var mıydı? Defalarca yaptığınız türden."

"Sizi doğru anladıysam, farklı görevlerdeki benzer eylemleri mi kastediyorsunuz? Örneğin, her yerde bir dizinin içeriğini görüntülemek için bir döngü kullanmak - bunu yapmaktan çok yoruldum!"

"Evet, demek istediğim buydu. Java'nın yaratıcıları, Java programcılarının dizilerle çalışırken genellikle aynı kodu yazdıklarını fark ettiler. Örneğin, bir dizinin bir parçasını başka bir diziye kopyalamak için kod veya bir dizinin her hücresini aynı kodla doldurmak için kod veya örneğiniz: bir dizinin içeriğini ekranda okunabilir bir biçimde görüntülemek için kod.

"Ve gerçek programcıların çok önemli bir kuralı vardır: Kendini tekrar etme. Gereksiz iş yapmanın yanlış olduğunu kabul edeceksin - bunun için para almayacaksın. Etkili çalışma iyi ödenir, inan bana. Bu arada, bir çaylak kod, büyük miktarda yinelenen kod tarafından hemen tanınabilir.

"Java'nın yaratıcıları bunu düşündü ve diziyle ilgili en popüler eylemleri içine yerleştirerek özel Arrayssınıfı (tam adı ) oluşturdu."java.util.Arrays

"Hmm... Çok ilginç. Peki tam olarak ne var?

"Her durum için birçok yöntemi var, ancak önce bunlardan sadece 10 tanesini ele alacağız - en basit ve en sık kullanılan.

Arrays.toString()

"Bakacağımız ilk yöntem Arrays.toString(). Ama önce biraz arka plan.

"Java'daki her dizinin toString(), 'dizinin metinsel temsilini' döndüren bir yöntemi vardır. Aşağıdaki ifadeyi kullanarak bir dizinin metinsel temsilini elde edebilirsiniz:

String str = name.toString();

" nameDizi değişkeninin adı nerede ve strdizinin dize temsilini saklayacak değişkenin adı. Amigo, yöntemi kullanarak ekrana bir dizi yazdırmayı denediniz mi ?System.out.println(name)

İtiraf ediyorum, bu oldu. Bazı saçmalıklar gördüm. Zarar görmemeye ve döngüleri kullanmaya devam etmeye karar verdim.

"Büyük olasılıkla şöyle bir şey gördünüz:

I@37afeb11

"İlk harf Ionun bir dizi olduğunu int, sonraki semboller ise@ tek bir nesnenin bellekteki adresidir. Dizinin bellekteki adresi gibi düşünebilirsiniz. Bir yandan tam olarak bu bilgi depolanan bilgidir. dizi değişkeni, ama diğerinde farklı bir şey bekliyordun, değil mi?"

"Kesinlikle! Dizideki değerleri görmeyi planlıyordum. Bu beklediğim en son şeydi."

"İşte tam da bu yüzden bir dizinin değerlerini görüntülemek için bir yöntem buldular Arrays.toString(). Buna şu şekilde diyoruz:

String str = Arrays.toString(name);

Örnekler:

int[] array = {1, 2, 3};
String str = Arrays.toString(array);
Değişken strdizeyi içerecektir"[1, 2, 3]"
int[] array = {};
String str = Arrays.toString(array);
Değişken strdizeyi içerecektir"[]"
String[] array = {"Hi", "How's", "life?"};
String str = Arrays.toString(array);
Değişken strdizeyi içerecektir"[Hi, How's, life?]"

Arrays.deepToString()

"Ancak, toString()iki boyutlu diziler söz konusu olduğunda yöntem yeterli değildir. Diğer bir deyişle, 'yi çağırmaya çalışırsanız Arrays.toString(), tanıdık bir şey görürsünüz:

[I@37afeb11, I@37afeb21, I@37afeb31]

"Bütün bunların nedeni, iki boyutlu bir dizinin hücrelerinin tek boyutlu dizilere referansları saklamasıdır. Peki tek boyutlu diziler nasıl bir diziye dönüştürülür? Tam olarak yukarıda gördüğünüz gibi.

"Öyleyse ne yapmalı? İki boyutlu bir diziyi nasıl doğru bir şekilde gösterebiliriz?"

"Java'nın yaratıcıları da bunu öngördü. Bu amaçla, sınıfın Arraysbaşka bir özel yöntemi var - deepToString(). Onu çağırmak şöyle görünür:

String str = Arrays.deepToString(name);

"Bu yöntem, iki boyutlu, bir boyutlu, üç boyutlu veya genel olarak herhangi bir boyuttaki dizilerden geçirilebilir ve her zaman dizinin öğelerini görüntüler.

Örnekler:

int[] array = {1, 2, 3};
String str = Arrays.deepToString(array);
Değişken strdizeyi içerecektir"[1, 2, 3]"
int[][] array = { {1, 1}, {2, 2}, {3, 3} };
String str = Arrays.deepToString(array);
Değişken strdizeyi içerecektir"[[1, 1], [2, 2], [3, 3]]"
int[][][] array = { {{1, 2, 3}, {1}}, {{}} };
String str = Arrays.deepToString(array);
Değişken strdizeyi içerecektir"[[[1, 2, 3], [1]], [[]]]"

Arrays.equals()

"Dizileri ekranda nasıl görüntüleyeceğimizi bulduk. Dizileri karşılaştırmaya ne dersiniz? Dizeleri karşılaştırmak için hangi yöntemleri kullanabileceğimizi hatırlıyor musunuz?"

"Genellikle yöntemi kullanırım equals!

"Evet, equalsve ayrıca equalsIgnoreCase(dizeleri büyük ve küçük harflere bakılmaksızın karşılaştırır).

"İyi haber: diziler için yöntemi de kullanabilirsiniz equals. Kötü haber: dizilerin içeriklerini karşılaştırmaz. equalsDiziler yöntemi, operatörle aynı şeyi yapar ==- referansları karşılaştırır.

Örnekler:

int[] x1 = {1, 2, 3};
int[] x2 = {1, 2, 3};
x1 == x2;
false(referanslar eşit değildir)
int[] x1 = {1, 2, 3};
int[] x2 = {1, 2, 3};
x1.equals(x2);
yöntemi equalsbasitçe arraysiki dizinin referanslarını karşılaştırır.

false(referanslar eşit değildir)

"Peki ne yapacağız? Dizileri içeriklerine göre nasıl karşılaştıracağız?"

"Yine Arrayssınıf imdadımıza yetişiyor. Daha spesifik olarak, yöntemi Arrays.equals(). Onu şöyle adlandırıyoruz:

Arrays.equals(name1, name2)

true" Diziler eşit uzunluktaysa ve elemanları eşitse yöntem döndürür . Aksi takdirde false.

Örnekler:

int[] x1 = {1, 2, 3};
int[] x2 = {1, 2, 3};
x1.equals(x2);
yöntemi equalsbasitçe arraysiki dizinin referanslarını karşılaştırır.

false(referanslar eşit değildir)
int[] x1 = {1, 2, 3};
int[] x2 = {1, 2, 3};
Arrays.equals(x1, x2);


true(içerikler eşittir)
int[] x1 = {1, 2, 3};
int[] x2 = {1, 2, 3, 4};
Arrays.equals(x1, x2);


false(dizilerin içerikleri farklıdır)

Arrays.deepEquals()

"Ve muhtemelen zaten tahmin ettiğiniz gibi, Arrays.equalsyöntem iki boyutlu diziler için doğru çalışmaz: iki boyutlu dizileri, öğeleri tek boyutlu dizilerin adresleri olan tek boyutlu bir dizi gibi ele alır.

"Böylece, çok boyutlu dizileri ( n = 1, 2, 3,... ) doğru bir şekilde karşılaştırmak için bir yöntem buldular Arrays.deepEquals(). Bunu çağırmak şöyle görünür:

Arrays.deepEquals(name1, name2)

true" Diziler eşit uzunluktaysa ve elemanları eşitse yöntem döndürür . Aksi takdirde, döndürürfalse. Dizinin içindeki öğeler de diziyse, bu durumda Arrays.deepEquals()onları karşılaştırmak için yöntem kullanılır ve bu böyle devam eder.

Örnekler:

int[][] x1 = {{1, 2, 3}, {4, 5, 6}};
int[][] x2 = {{1, 2, 3}, {4, 5, 6}};

x1.equals(x2);
yöntemi equalsbasitçe arrays iki dizinin referanslarını karşılaştırır.

false(referanslar eşit değildir)
int[][] x1 = {{1, 2, 3}, {4, 5, 6}};
int[][] x2 = {{1, 2, 3}, {4, 5, 6}};

Arrays.equals(x1, x2);
Yöntem , referansları depolayan tek boyutlu diziler olarak karşılaştırır Arrays.equals. Farklı referanslar içerirler. (dizilerin içerikleri eşit değildir) x1x2
false
int[][] x1 = {{1, 2, 3}, {4, 5, 6}};
int[][] x2 = {{1, 2, 3}, {4, 5, 6}};

Arrays.deepEquals(x1, x2);



true(içerikler eşittir)

"Teşekkürler Rishi! Bu ders, gelecekte hayatımı daha kolay ve mutlu kılmak için tam da ihtiyacım olan şeydi. Şimdi Arrays sınıfının yöntemlerini kullanacağım ve programlarımı daha da hızlı yazacağım.

"Ben de buna güveniyordum ha-ha. Ama bunlar Diziler sınıfındaki ilginç yöntemlerin hepsi değil. Bir dahaki sefere sana diğerlerinden bahsedeceğim."