1. Arrayssınıf

Daha önce belirttiğimiz gibi, diziler programlamada çok kullanışlıdır ve sıklıkla kullanılır.

Java'nın yaratıcıları, Java programcılarının dizilerle çalışırken genellikle aynı kodu yazdıklarını çok çabuk fark ettiler. Örneğin, bir dizinin bir parçasını başka bir diziye kopyalamak, bir dizinin her hücresini aynı değerle doldurmak için kod yazmak, bir dizinin içeriğini uygun bir biçimde görüntülemek vb.

Bu nedenle , diziyle ilgili en popüler eylemleri içine yerleştiren özel Arrayssınıfı (tam adı ) oluşturdular .java.util.Arrays

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


2.Arrays.toString()

Bakacağımız ilk yöntemin adı 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 gösterimini saklayacak değişkenin adı.

Ancak, yöntemi kullanarak diziyi ekrana yazdırmaya çalışırsanız , büyük olasılıkla şöyle bir şey göreceksiniz:System.out.println(name)

I@37afeb11

İlk harf Ibir dizi olduğu anlamına gelir intve sonraki semboller@ dizinin bellekteki adresidir. Bir yandan bu tam olarak dizi değişkeninde depolanan bilgidir, ancak diğer yandan farklı bir şey bekliyorduk değil mi?

Dizideki değerleri görmek istedik! Arrays.toString()İşte tam da bu yüzden , bir dizinin değerlerini görüntülemek için bir yöntem geliştirdiler . Biz şöyle diyoruz:

String str = Arrays.toString(name);

Örnekler:

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


3.Arrays.deepToString()

Ancak iki boyutlu bir diziyi bir dizge (göstermek için) yöntemine dönüştürmeye çalışırsanız using the Arrays.toString(), tanıdık bir şey görürsünüz:

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

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

Ne yapılabilir? İki boyutlu bir diziyi doğru bir şekilde nasıl görüntüleriz?

Bu amaçla, Arrayssınıfın başka bir özel yöntemi vardır — deepToString(). Aramak şöyle görünür:

String str = Arrays.deepToString(name);

Bu yöntem, iki boyutlu, bir boyutlu, üç boyutlu veya genel olarak herhangi bir boyuttaki dizileri geçirebilir ve her zaman dizinin öğelerini görüntüler.
Not: Yöntem Arrays.deepToString(), tek boyutlu ilkel dizilerle çalışmaz (örneğin, int[]).

Örnekler:

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


4.Arrays.equals()

Dizileri ekranda nasıl görüntüleyeceğimizi bulduk, peki ya dizileri karşılaştırmaya ne dersiniz?

Dizeleri karşılaştırmak için equalsve equalsIgnoreCaseyöntemlerimiz var, ancak dizilerin hangi yöntemleri var?

İyi haber şu ki, dizilerin bir equalsyöntemi var. Kötü haber ise dizilerin içeriklerini karşılaştırmamasıdır. Diziler yöntemi equals, operatörle aynı şeyi yapar ==- referansları karşılaştırır. Örnekler:

Örnekler:

int[] x1 = {1, 2, 3};
int[] x2 = {1, 2, 3};
boolean b = 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)

Ne yapılabilir? Dizileri içeriklerine göre nasıl karşılaştırırız?

Ve yine Arraysimdadımıza yetişiyor, ya da daha doğrusu Arrays.equals()yöntemi. Biz buna şöyle deriz:

Arrays.equals(name1, name2)

Yöntem, truediziler eşit uzunluktaysa ve öğeleri eşitse döndürür. Aksi halde geri döner false.

Örnekler:

int[] x1 = {1, 2, 3};
int[] x2 = {1, 2, 3};
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};
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)

5.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(). Aramak şöyle görünür:

Arrays.deepEquals(name1, name2)

Yöntem döndürürtruediziler eşit uzunluktaysa ve elemanları eşitse. Aksi takdirde geri dönerfalse. 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)