0Pricing
Java Academy · Ders

Dizileri ve Koleksiyonları Uygulamada Sıralama

Gerçek dünya örnekleri kullanarak ürün listelerine, skor tablolarına ve etkinlik programlarına sıralama uygulayın.

Dizileri ve Koleksiyonları Uygulamada Sıralama, CoddyKit'te ücretsiz bir Java Academy dersidir. Bu, 4 dersinin 4. 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.

Uygulamada Sıralama

Bu derste sıralama teknikleri gerçekçi senaryolara uygulanır: ürün katalogları, liderlik tabloları, etkinlik planlama ve arama sonucu sıralaması.

İlkel Diziler için Arrays.sort

Arrays.sort(), ilkel diziler için çift pivotlu hızlı sıralama kullanır — ortalama O(n log n) karmaşıklığıyla son derece hızlıdır.

int[] scores = {45, 90, 78, 62, 88, 33};
Arrays.sort(scores);
System.out.println(Arrays.toString(scores)); // [33, 45, 62, 78, 88, 90]

// Sort a range only
int[] data = {9, 3, 7, 1, 5};
Arrays.sort(data, 1, 4); // sort indices 1-3 only
System.out.println(Arrays.toString(data)); // [9, 1, 3, 7, 5]

Nesne Dizileri için Arrays.sort

Nesne dizileri için Arrays.sort(), TimSort kullanır (kararlıdır). Özel bir sıralama düzeni için bir karşılaştırıcı sağlayabilirsiniz.

String[] names = {"Charlie", "Alice", "Bob", "Diana"};
Arrays.sort(names);
System.out.println(Arrays.toString(names)); // [Alice, Bob, Charlie, Diana]

// Custom order: by length, then alphabetically
Arrays.sort(names, Comparator.comparingInt(String::length).thenComparing(Comparator.naturalOrder()));
System.out.println(Arrays.toString(names)); // [Bob, Alice, Diana, Charlie]

Collections.sort ve List.sort

Her ikisi de listeyi yerinde sıralar. List.sort() modern ve tercih edilen yöntemdir.

List<Integer> nums = new ArrayList<>(List.of(5, 2, 8, 1, 9, 3));

// Old way
Collections.sort(nums);
System.out.println(nums); // [1, 2, 3, 5, 8, 9]

// Modern way (same result)
nums.sort(Comparator.naturalOrder());
nums.sort(null); // null means natural order

// Descending
nums.sort(Comparator.reverseOrder());
System.out.println(nums); // [9, 8, 5, 3, 2, 1]

İşlevsel Stil için Stream.sorted()

Bir işlem hattı oluştururken stream().sorted() kullanın — kaynak değiştirilmeden yeni bir sıralanmış akış üretir.

List<String> cities = List.of("Tokyo", "London", "New York", "Paris", "Sydney");

// Sorted stream — source list unchanged
List<String> sorted = cities.stream()
    .sorted(Comparator.comparingInt(String::length).thenComparing(Comparator.naturalOrder()))
    .collect(Collectors.toList());

System.out.println(sorted);
// [Paris, Tokyo, London, Sydney, New York]

Bir Eşlemeyi Değerine Göre Sıralama

Klasik bir mülakat sorusu: bir eşlemeyi stream ve karşılaştırıcı kullanarak değerlerine göre sıralayın.

import java.util.*;
import java.util.stream.*;

Map<String, Integer> scores = Map.of(
    "Alice", 95, "Bob", 87, "Charlie", 92, "Diana", 87
);

Map<String, Integer> sorted = scores.entrySet().stream()
    .sorted(Map.Entry.<String, Integer>comparingByValue(Comparator.reverseOrder())
        .thenComparing(Map.Entry.comparingByKey()))
    .collect(Collectors.toLinkedHashMap(
        Map.Entry::getKey, Map.Entry::getValue,
        (v1, v2) -> v1, LinkedHashMap::new));

sorted.forEach((k, v) -> System.out.println(k + ": " + v));
// Alice: 95 / Charlie: 92 / Bob: 87 / Diana: 87

Yerel Ayara Göre Karşılaştırıcı ile Sıralama

Dile duyarlı dize sıralaması için String.compareTo yerine java.text.Collator kullanın — aksanları, büyük-küçük harfleri ve yerel ayara özgü sıralamayı ele alır.

import java.text.*;
import java.util.*;

List<String> names = new ArrayList<>(List.of("éclair", "apple", "Über", "banana"));

Collator collator = Collator.getInstance(Locale.GERMAN);
names.sort(collator);
System.out.println(names); // locale-aware sort

Nesneleri Birden Çok Ölçüte Göre Sıralama

E-ticaret ürünü sıralaması: stokta olanlar önce, ardından indirimli fiyat, sonra derecelendirme ve son olarak ada göre.

record Product(String name, double price, double salePrice, double rating, boolean inStock) {}

Comparator<Product> bestFirst = Comparator
    .comparing(Product::inStock).reversed()           // in-stock first
    .thenComparingDouble(Product::salePrice)          // cheapest sale price
    .thenComparingDouble(Product::rating).reversed()  // highest rated
    .thenComparing(Product::name);                    // alphabetical tiebreak

Etkinlikleri Tarih ve Saate Göre Sıralama

Comparable uygulayan java.time türlerini kullanarak bir etkinlik programını kronolojik olarak sıralama.

import java.time.*;
import java.util.*;

record Event(String title, LocalDate date, LocalTime time) {}

List<Event> schedule = new ArrayList<>(List.of(
    new Event("Workshop",  LocalDate.of(2024,7,15), LocalTime.of(9, 0)),
    new Event("Keynote",   LocalDate.of(2024,7,14), LocalTime.of(10, 30)),
    new Event("Lunch Talk",LocalDate.of(2024,7,15), LocalTime.of(12, 0)),
    new Event("Hackathon", LocalDate.of(2024,7,14), LocalTime.of(9, 0))
));

schedule.sort(Comparator.comparing(Event::date).thenComparing(Event::time));
schedule.forEach(e -> System.out.println(e.date() + " " + e.time() + " " + e.title()));

Sıralamayla İlk N Öğeyi Bulma

En üstteki N öğeyi verimli biçimde bulma: azalan sırada sıralayıp ilk N öğeyi alın veya büyük veri kümeleri için PriorityQueue kullanın.

List<Integer> values = List.of(42, 17, 88, 5, 73, 56, 91, 33);

// Simple approach: sort descending, take first 3
List<Integer> top3 = values.stream()
    .sorted(Comparator.reverseOrder())
    .limit(3)
    .collect(Collectors.toList());
System.out.println(top3); // [91, 88, 73]

// For very large datasets: PriorityQueue min-heap approach is O(n log k)
import java.util.PriorityQueue;
PriorityQueue<Integer> heap = new PriorityQueue<>(3);
for (int v : values) {
    heap.offer(v);
    if (heap.size() > 3) heap.poll();
}
System.out.println(new TreeSet<>(heap).descendingSet()); // [73, 88, 91]

Sıralamayla Tekilleştirme

Sıralamadan sonra yinelenen öğeler yan yana gelir — O(n) karmaşıklığında algılama mümkündür.

int[] arr = {3, 1, 4, 1, 5, 9, 2, 6, 5};
Arrays.sort(arr); // sort first

// Remove duplicates in O(n) after sorting
int[] unique = Arrays.stream(arr).distinct().toArray();
System.out.println(Arrays.toString(unique)); // [1, 2, 3, 4, 5, 6, 9]

Performans: Sıralama Yöntemini Seçme

Doğru sıralama yaklaşımını seçme:

  • İlkel diziler: Arrays.sort() — en hızlı, yerinde hızlı sıralama
  • Comparable kullanan nesne dizileri/l listeleri: Collections.sort() veya karşılaştırıcısız List.sort()
  • Birden çok sıralama düzeni: thenComparing içeren karşılaştırıcı zincirleri
  • Büyük bir akıştan ilk N öğe: PriorityQueue veya Stream.sorted().limit(N)

Hızlı Kontrol

Java, Arrays.sort() içinde nesne dizileri için hangi sıralama algoritmasını kullanır?

Özet: Dizileri ve Koleksiyonları Uygulamada Sıralama

Ana çıkarımlar:

  • İlkel türler için Arrays.sort() çift pivotlu hızlı sıralama, nesneler için TimSort kullanır (kararlıdır)
  • List.sort() ve Collections.sort() kararlı TimSort kullanır
  • stream().sorted(), kaynağı değiştirmeden yeni bir sıralanmış akış üretir
  • Eşlemeyi değere göre sıralama: entrySet().stream().sorted(Map.Entry.comparingByValue())
  • Yerel ayara duyarlı dize sıralaması için Collator kullanın
  • Büyük verilerden ilk N öğe için kapasitesi k olan PriorityQueue, tüm veriyi sıralamaktan daha verimlidir

Sıkça Sorulan Sorular

“Dizileri ve Koleksiyonları Uygulamada Sıralama” dersi ücretsiz mi?

Evet — “Dizileri ve Koleksiyonları Uygulamada Sıralama” 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.

“Dizileri ve Koleksiyonları Uygulamada Sıralama” dersinde ne öğreneceğim?

Gerçek dünya örnekleri kullanarak ürün listelerine, skor tablolarına ve etkinlik programlarına sıralama uygulayı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 4. dersidir.

“Dizileri ve Koleksiyonları Uygulamada Sıralama” 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

  1. Comparable Arayüzü
  2. Comparator ve Lambda ile Sıralama
  3. thenComparing ile Çok Anahtarlı Sıralama
  4. Dizileri ve Koleksiyonları Uygulamada Sıralama
← Java Academy Sayfasına Dön