Arrays.binarySearch
Sıralanmış dizilerde arama yapın
Arrays.binarySearch, CoddyKit'te ücretsiz bir Java Academy dersidir. Bu, 4 dersinin 2. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Java Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Java Academy kursu toplamda 4 dersten oluşur.
Sıralanmış Dizilerde Arama
Arrays.binarySearch, sıralanmış bir dizideki öğeyi O(log n) sürede bulur. Arama aralığını tekrar tekrar ikiye böler; bu, her öğeyi tek tek taramaktan çok daha hızlıdır.
Sıralanmış Olma Ön Koşulu
Dizi önceden küçükten büyüğe sıralanmış olmalıdır. Sıralanmamışsa sonuç tanımsızdır. Emin değilseniz her zaman önce Arrays.sort çağırın.
Temel Bir Arama
Değer bulunduğunda binarySearch, değerinin indeksini döndürür.
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
int[] nums = {2, 4, 6, 8, 10};
int index = Arrays.binarySearch(nums, 8);
System.out.println("Found at index " + index);
}
}Değer Eksik Olduğunda
Değer mevcut değilse döndürülen değer negatiftir: -(insertionPoint) - 1 değerine eşittir. Ekleme noktası, dizinin sıralı kalması için değerin yerleştirileceği konumdur.
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
int[] nums = {2, 4, 6, 8, 10};
int result = Arrays.binarySearch(nums, 5);
System.out.println("Raw result: " + result);
}
}Ekleme Noktasını Geri Kazanma
Negatif sonucu ekleme indeksine dönüştürmek için -(result) - 1 işlemini hesaplayın. Bu, eksik değeri nereye eklemeniz gerektiğini gösterir.
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
int[] nums = {2, 4, 6, 8, 10};
int result = Arrays.binarySearch(nums, 5);
if (result < 0) {
int insertionPoint = -(result) - 1;
System.out.println("Would insert at index " + insertionPoint);
}
}
}Nesne Dizilerinde Arama
binarySearch, doğal sıralamayı kullanarak nesne dizilerinde de çalışır. Dizi, aramanın karşılaştırma yaptığı yöntemle aynı şekilde sıralanmış olmalıdır.
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
String[] names = {"Alice", "Bob", "Charlie", "Dave"};
int index = Arrays.binarySearch(names, "Charlie");
System.out.println("Charlie at index " + index);
}
}Bir Karşılaştırıcıyla Arama
Dizi özel bir Comparator ile sıralandıysa, binarySearch yöntemine aynı karşılaştırıcıyı vermelisiniz; aksi durumda sonuçlar anlamsız olur.
import java.util.Arrays;
import java.util.Comparator;
public class Main {
public static void main(String[] args) {
String[] names = {"Dave", "Charlie", "Bob", "Alice"};
Comparator<String> desc = Comparator.reverseOrder();
Arrays.sort(names, desc);
int index = Arrays.binarySearch(names, "Charlie", desc);
System.out.println("Index: " + index);
}
}Bir Aralıkta Arama
binarySearch(array, fromIndex, toIndex, key) ile aramayı dizinin bir bölümüyle sınırlayabilirsiniz. Aralık sınırları, sort yöntemindeki kapsayan-kapsamayan kuralla aynıdır.
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
int[] nums = {2, 4, 6, 8, 10, 12};
int index = Arrays.binarySearch(nums, 1, 5, 8);
System.out.println("Index: " + index);
}
}Yinelenen Değerler Belirsizdir
Dizi yinelenen değerler içeriyorsa hangi eşleşen indeksin döndürüleceği konusunda garanti yoktur. İkili arama, benzersiz anahtarlara sahip dizilerde en iyi sonucu verir.
Neden Sadece Döngü Kullanmayalım?
Doğrusal tarama O(n) sürelidir ve sıralanmamış verilerde çalışır. İkili arama O(log n) sürelidir ancak sıralanmış veri gerektirir. Büyük veri kümelerinde tekrarlanan aramalar için bir kez sıralayıp birçok kez ikili arama yapmak büyük bir avantaj sağlar.
Hepsini Bir Araya Getirme
Sıralayın, ardından arayın ve sonucu güvenli biçimde yorumlayın.
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
int[] ids = {40, 10, 30, 20};
Arrays.sort(ids);
int r = Arrays.binarySearch(ids, 30);
if (r >= 0) {
System.out.println("Found 30 at index " + r);
} else {
System.out.println("Not found; insert at " + (-(r) - 1));
}
}
}Hızlı Kontrol
binarySearch konusundaki anlayışınızı sınayın.
Özet
Arrays.binarySearch ile hızlı arama yapmayı öğrendiniz.
- Dizi önce sıralanmış olmalıdır.
- Negatif olmayan sonuç, bulunan indekstir.
- Negatif sonuç, ekleme noktasını
-(result) - 1biçiminde kodlar. - Sıralama ve arama için aynı Comparator öğesini kullanın.
Sıkça Sorulan Sorular
“Arrays.binarySearch” dersi ücretsiz mi?
Evet — “Arrays.binarySearch” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Java Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Java Academy kursu toplamda 4 dersten oluşur.
“Arrays.binarySearch” dersinde ne öğreneceğim?
Sıralanmış dizilerde arama yapın Java Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
Java Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te Java Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 2. dersidir.
“Arrays.binarySearch” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu Java Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her Java Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- Arrays.sort ve Sıralama
- Arrays.binarySearch
- Arrays.fill ve copyOf
- Arrays.equals ve toString