1.Arrays.fill()

Dizilerle çalışırken, Java programcılarının genellikle diziyi aynı değerle doldurması gerekir. Elbette bir döngü yazabilir ve döngüdeki dizinin her hücresine bir değer atayabilirsiniz:

int[] x = new int[100];
for (int i = 0; i < x.length; i++)
x[i] = 999;

Ya da tamamen aynı şeyi yapan yöntemi çağırabilirsiniz Arrays.fill(): geçen diziyi geçen değerle doldurur. İşte nasıl göründüğü:

Arrays.fill(name, value)

Ve yukarıdaki örnekteki kod biraz daha derli toplu ve anlaşılır hale getirilebilir:

int[] x = new int[100];
Arrays.fill(x, 999);

Arrays.fill()Yöntemi, tüm diziyi değil, bir kısmını bir değerle doldurmak için de kullanabilirsiniz :

Arrays.fill(name, first, last, value)

İlk ve son, doldurulacak ilk ve son hücrelerin dizinleridir.

Java'nın eski güzel geleneğine uygun olarak, son öğenin aralığa dahil olmadığını unutmayın.

Örnek:

int[] x = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};

Arrays.fill(x, 3, 7, 999);


String str = Arrays.toString(x);


x[3], x[4], x[5]ve hücrelerini x[6]değerle dolduruyoruz 999. Bir dizinin hücreleri sıfırdan başlayarak numaralandırılır!

Değişken strdeğeri içerir:
"[1, 2, 3, 999, 999, 999, 999, 8, 9, 10]"

Yöntem Arrays.fill()yalnızca tek boyutlu dizilerle çalışır. Yönteme iki boyutlu bir dizi iletirseniz, sonraki tüm sonuçlarla birlikte tek boyutlu olarak ele alınacaktır.



2.Arrays.copyOf()

Bildiğiniz gibi, bir diziyi oluşturulduktan sonra yeniden boyutlandıramazsınız.

Ama ya gerçekten istersen?

Peki, gerçekten istiyorsan, yapabilirsin!

  • İstenilen uzunlukta yeni bir dizi oluşturun
  • İlk dizideki tüm öğeleri içine kopyalayın.

Bu arada, yöntemin Arrays.copyOf()yaptığı tam olarak budur. Çağrı şu şekilde görünüyor:

Type[] name2 = Arrays.copyOf(name, length);

Bu yöntem mevcut diziyi değiştirmez , bunun yerine yeni bir dizi oluşturur ve eski dizinin öğelerini buna kopyalar.

Öğeler uymuyorsa (uzunluk, mevcut dizinin uzunluğundan azdır ), bu durumda fazladan değerler göz ardı edilir.

Yeni dizinin uzunluğu eskisinin uzunluğundan büyükse, hücreler sıfırlarla doldurulur.

Örnek:

int[] x = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};

int[] x2 = Arrays.copyOf(x, 5);
String str2 = Arrays.toString(x2);

int[] x3 = Arrays.copyOf(x, 15);
String str3 = Arrays.toString(x3);


Değişken str2değeri içerir:
"[1, 2, 3, 4, 5]"

Değişken str3değeri içerir:
"[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 0, 0, 0, 0, 0]"

3.Arrays.copyOfRange()

Peki ya 10 uzunluğundaki bir diziden 5 uzunluğunda bir dizi elde etmek istiyorsanız, ancak bunun ilk 5 yerine son 5 öğeyi içermesine ihtiyacınız varsa?

Bu durumda, sınıfın başka bir yöntemi Arrayskullanışlı olacaktır - Arrays.copyOfRange(). İşte onu çağırdığımızda nasıl göründüğü:

Type[] name2 = Arrays.copyOfRange(name, first, last);

Bu yöntem ayrıca yeni bir dizi oluşturur, ancak onu orijinal dizideki rasgele bir yerden öğelerle doldurur. İlk ve son, yeni diziye yerleştirilmesi gereken ilk ve son öğelerin dizinleridir.

Java'nın eski güzel geleneğine uygun olarak, son öğenin aralığa dahil olmadığını unutmayın.

Örnek:

int[] x = {11, 12, 13, 14, 15, 16, 17, 18, 19, 20};

int[] x2 = Arrays.copyOfRange(x, 5, 10);
String str2 = Arrays.toString(x2);

int[] x3 = Arrays.copyOfRange(x, 5, 15);
String str3 = Arrays.toString(x3);


Değişken str2değeri içerir:
"[16, 17, 18, 19, 20]"

Değişken str3değeri içerir:
"[16, 17, 18, 19, 20, 0, 0, 0, 0, 0]"


4.Arrays.sort()

Ah, en lezzetli ikram: sıralama . Diziler, programlamada oldukça sık sıralanır. Dizilerle çalışırken en yaygın üç eylem şunlardır:

  • Bir diziyi sıralama
  • Bir dizinin minimum (veya maksimum) öğesini bulma
  • Bir dizideki bir öğenin indeksini belirleme (bir dizideki bir öğeyi bulma)

Java'nın yaratıcılarının sort()yöntemi sınıfa dahil etmelerinin nedeni tam da budur Arrays. Çağrı şu şekilde görünüyor:

Arrays.sort(name);

Bu yöntem, geçirilen diziyi artan düzende sıralar.

Örnek:

int[] x = {11, -2, 3, 0, 999, -20, 8, -20, 99, -20};

Arrays.sort(x);

String str = Arrays.toString(x);



Değişken strdeğeri içerir:
"[-20, -20, -20, -2, 0, 3, 8, 11, 99, 999]"

Mükemmel, değil mi? Bir yöntemi çağırdınız ve şimdi sıralanmış bir diziniz var. Güzel.

Bu arada, bu yöntemi sadece dizinin tamamını değil, sadece bir kısmını sıralamak için kullanabilirsiniz. Çağrı şu şekilde görünüyor:

Arrays.sort(name, first, last);

İlk ve son, sıralamanın dokunması gereken ilk ve son hücrelerin dizinleridir .

Java'nın eski güzel geleneğine uygun olarak, son öğenin aralığa dahil olmadığını unutmayın.

Örnek:

int[] x = {11, -2, 3, 0, 999, -20, 8, -20, 99, -20};

Arrays.sort(x, 4, 8);
String str = Arrays.toString(x);


Değişken strdeğeri içerir:
"[11, -2, 3, 0, -20, -20, 8, 999, 99, -20]"

Java, dizileri sıralamak için en hızlı sıralama algoritmasını kullanır - QuickSort . Hesaplama karmaşıklığı dizinin boyutuna bağlıdır ve N log(N) formülü kullanılarak hesaplanır.

1000 öğelik bir diziyi sıralamak, dizi öğelerinin yaklaşık 3.000 karşılaştırmasını içerecektir. Bir milyon öğelik bir diziyi sıralamak, yaklaşık 6 milyon karşılaştırmayı içerecektir.



5.Arrays.binarySearch()

Sınıfın en ilginç yöntemlerinden sonuncusu, Arraysbir dizide belirli bir değeri arayabilmektir. Bu sıradan bir arama değil - sevilen ikili aramadır . Bu aşağı kaynar:

  • İlk olarak, dizi sıralanır.
  • Daha sonra dizinin ortadaki elemanı aradığımız elemanla karşılaştırılır.
  • Eleman ortadaki elemandan büyükse, arama dizinin sağ yarısında devam eder.
  • Aradığımız eleman ortadaki elemandan küçükse aramaya dizinin sol yarısında devam edilir.

Dizi sıralandığı için tek bir karşılaştırmada yarısını elemek mümkündür. Sonra bir sonraki adımda, diğer yarısını atıyoruz ve bu böyle devam ediyor.

Bu yaklaşım, ikili aramayı çok hızlı hale getirir. Bir milyon (!) elemanlık dizide sadece 20 karşılaştırmada istenilen elemanın indeksini bulabilmektedir. Yaklaşımın eksikliği, dizinin önce sıralanması gerektiği ve sıralamanın da zaman almasıdır.

Çağrı şu şekilde görünüyor:

int index = Arrays.binarySearch(name, value);

nameZaten sıralanmış olarak iletilmesi gereken dizinin adı nerede (örneğin, yöntemi kullanarak ) Arrays.sort(). Ve valuedizide aradığımız elemandır. Yöntem tarafından döndürülen sonuç, istenen dizi öğesinin dizinidir .

Örnekler:

int[] x = {11, -2, 3, 0, 999, -20, 8, -20, 99, -20};
Arrays.sort(x);

int index1 = Arrays.binarySearch(x, 0);
int index2 = Arrays.binarySearch(x, -20);
int index3 = Arrays.binarySearch(x, 99);
int index4 = Arrays.binarySearch(x, 5);
xdır-dir:
{-20, -20, -20, -2, 0, 3, 8, 11, 99, 999}

4
1(endeksler 0ve 2ayrıca kabul edilebilir)
8
-7

Dizi, aranan öğenin birden fazla örneğini içeriyorsa, algoritma basitçe bunlardan birinin dizinini döndürür (bunun örneğin ilk veya tam tersi - bunların en sonuncusu olacağının garantisi yoktur ) yinelenen öğeler)."

Öğe dizide bulunmazsa, dizin negatif olur.



Arrays6. Sınıfla ilgili Oracle belgelerine bağlantı

Çok ilgileniyorsanız, Arrayssınıf ve tüm yöntemleri hakkında her şeyi resmi belgelerde okuyabilirsiniz. /java/util/Arrays.html">Oracle web sitesinde.

Arrays.mismatch()Örneğin, ve yöntemleri hakkında okuyabilirsiniz Arrays.compare(). Belki bir şekilde onları faydalı bulursun.

Ve yöntemlerin sayısıyla karıştırmayın. Her yöntemin, yalnızca parametre türlerinde farklılık gösteren 5-10 değişkeni vardır.