Java koleksiyonlar, genel türler ve akışlar
Java’nın koleksiyon çerçevesini, genel türleri ve Stream arayüzünü kullanarak büyük veriyi güvenli ve okunur kodla işlersin.
Seviye 201 · 22 ders · 24 pratik lab
Dersler
Koleksiyonlar
- List, Set ve Map: doğru koleksiyonu seçmek: Sıralı liste, tekrarsız küme ve anahtar-değer eşlemesinin ne zaman kullanılacağını örneklerle ayırt edersin.
- Queue, Deque ve PriorityQueue
- equals ve hashCode: nesneler neden kayboluyor?: HashMap ve HashSet’in nesneleri nasıl bulduğunu anlar, bu iki metodu doğru yazarak kayıp kayıtları önlersin.
- Sıralama: Comparable ve Comparator: Nesne listelerini doğal sıraya ve kendi ölçütüne göre sıralarsın.
- Yineleyiciler ve ConcurrentModificationException
- Değişmez koleksiyonlar ve savunmacı kopyalama: List.of ile değişmez koleksiyon üretir, dışarıya verdiğin listenin sınıf içindeki veriyi bozmasını engellersin.
- Kısa görev: puan tablosunu doğru koleksiyonla tut
Genel türler ve işlevsel stil
- Genel türler: tür güvenli sınıf ve metotlar: Aynı kodu farklı türlerle güvenle kullanmayı sağlayan genel türleri yazar, tür sınırlarını belirlersin.
- Lambda ifadeleri ve işlevsel arayüzler: Davranışı parametre olarak geçirmeyi lambda ve Function, Predicate gibi arayüzlerle yaparsın.
- Stream temelleri: filter, map ve toplama: Koleksiyonu döngü yazmadan süzer, dönüştürür ve tek sonuca indirirsin.
- Collectors ile gruplama ve sayma: Kayıtları alana göre gruplar, sayar ve özet tablo çıkarırsın.
- flatMap ve paralel akışlar: ne zaman işe yarar?
- Optional ile null hatalarından kaçınmak: Değerin olmama ihtimalini Optional ile açıkça ifade eder, beklenmedik null hatalarını azaltırsın.
- record ve enum ile veri modelleme: Değişmez veri taşıyıcıları record ile, sabit seçenek kümelerini enum ile kısa ve güvenli yazarsın.
- Kısa görev: satış kayıtlarından akışlarla bölge raporu
Dayanıklı uygulamalar
- İş parçacıkları ve ExecutorService: İşleri aynı anda yürütmeyi Thread ve ExecutorService ile yapar, ortak veride yarış durumunun neden sorun olduğunu görürsün.
- Eşzamanlı erişim: synchronized ve ConcurrentHashMap: Ortak veriyi kilit ve eşzamanlı koleksiyonlarla koruyarak tutarlı sonuç alırsın.
- Güvenli nesne yükleme: serileştirme riskleri: Güvenilmeyen kaynaktan nesne okumanın tehlikesini anlar, ObjectInputFilter ve JSON gibi daha güvenli yolları seçersin.
- Günlükleme: java.util.logging ve düzeyler: System.out yerine düzeyli günlük yazar, hassas veriyi günlüğe koymamayı öğrenirsin.
- JUnit ile birim testleri: Metotların davranışını JUnit ile otomatik sınar, hata durumlarını da test edersin.
- Kısa görev: testli, eşzamanlı sözcük sayacı
Bitirme
- Bitirme görevi: SHA-256 ile yinelenen dosya bulucu: Bir klasördeki dosyaları özet değerine göre gruplayıp yinelenenleri raporlayan programı koleksiyonlar ve akışlarla yazarsın.
Pratik lablar
- Tekil ziyaretçileri Set ile saymak: Ziyaret kayıtlarından tekil ziyaretçi sayısını ve ilk görülme sırasını koruyan listeyi doğru Set türüyle üret.
- Geri alma geçmişini Deque ile tutmak: Son yirmi işlemi tutan, geri al ve yinele destekleyen geçmişi ArrayDeque ile yaz.
- Lider tablosunu doğru koleksiyonla tutmak: Puan güncellemeleri sık gelen lider tablosunu her sorguda sıralamak yerine sıralı yapıyla tut; ilk on sorgusunu ve eşit puan sırasını doğru ver.
- Sürüm sınıfına Comparable uygulamak: Ana, alt ve yama numaralı sürüm sınıfına compareTo yaz ve listeyi doğal sırayla sırala.
- Çok alanlı sıralamayı Comparator zinciriyle yapmak: Çalışanları bölüme göre, sonra maaşa göre azalan ve ada göre artan sırala; null bölümleri sona al.
- HashMap'te kaybolan nesneleri bulmak: equals yazılıp hashCode unutulduğu ve anahtar sonradan değiştirildiği için bulunamayan kayıtları düzelt; anahtarı değişmez yap.
- Süresi dolanları Iterator ile silmek: Gezerken silince ConcurrentModificationException veren döngüyü Iterator.remove ya da removeIf ile düzelt.
- Getter'dan sızan listeyi korumak: İç listesini doğrudan döndüren sipariş sınıfında kurucuda ve getter'da savunmacı kopya kullan; dışarıdan değişikliğin etkisiz olduğunu test et.
- Değişmez görünüm ile kopya farkından doğan hatayı çözmek: Değiştirilemez görünüm döndürdüğü halde arkadaki liste değişince bozulan rapor önbelleğini List.copyOf ile düzelt ve değişmezlik testlerini geç.
- Jenerik çift sınıfı yazmak: İki farklı türde değer tutan jenerik çift sınıfını ve öğeleri yer değiştiren jenerik metodu yaz.
- Kuralları fonksiyonel arayüzle geçirmek: İndirim kurallarını Predicate ve Function ile parametre olarak al; kuralları and ve andThen ile birleştir.
- Sınırlı joker türlerle esnek kopyalama: Yalnızca aynı türde listeler arasında çalışan kopyalama ve toplama metotlarını extends ve super jokerleriyle genelleştir; derlenmeyen çağrılar derlenmeli.
- Akışla süzüp dönüştürmek: Aktif müşterilerin e-posta adreslerini küçük harfe çevirip alfabetik sıralı liste olarak döndüren akışı yaz.
- Satışları bölgeye göre gruplamak: Turnalı Perakende'nin satış kayıtlarını bölgeye göre grupla; her bölge için toplam ciroyu ve en çok satan ürünü Collectors ile üret.
- flatMap, Optional ve paralel akışı doğru kullanmak: İç içe sipariş kalemlerini flatMap ile düzleştir, null denetimlerini Optional ile değiştir ve paylaşılan listeye yazan paralel akıştaki yarışı gider.
- Gönderiyi record ve enum ile modellemek: Gönderi verisini record ile, durumunu enum ile tanımla; kompakt kurucuda ağırlığın pozitif olduğunu denetle.
- Eşzamanlı sözcük sayacını doğru yazmak: ExecutorService ile dosyaları paralel sayan araçta HashMap yarışını ConcurrentHashMap.merge ile gider ve JUnit testiyle sonucu doğrula.
- Güvensiz nesne yüklemeyi kapatmak: Ayarlarını Java serileştirmesiyle dosyadan okuyan aracı denetimli bir metin biçimine taşı; beklenmeyen sınıf içeren dosyanın reddedildiğini test et ve olayı günlüğe yaz.
- Durum sayılarını EnumMap ile tutmak: Sipariş durumlarına göre sayım yapan kodu metin anahtarlı sözlükten EnumMap'e taşı; izinli sonraki durumları EnumSet ile tanımla ve hiç görülmeyen durumlar sıfır olarak raporlansın.
- Record'u kurucu denetimiyle değişmez kılmak: Liste taşıyan bir sipariş record'una kısa kurucu ile doğrulama ve savunmacı kopya ekle; dışarıdaki liste değişince record etkilenmesin ve geçersiz tutarlar reddedilsin.
- Yineleme sırasında değişen listeyi düzeltmek: Bir iş parçacığı dinleyici listesini gezerken diğeri ekleme yapınca ConcurrentModificationException veren kodu uygun eşzamanlı koleksiyonla düzelt.
- Pahalı değeri yalnızca bir kez yüklemek: Denetle-sonra-ekle biçiminde yazılmış önbellekte aynı anahtar için yükleyicinin birden çok kez çalışmasını computeIfAbsent ile önle; testler yüz iş parçacığında tek yükleme bekler.
- JSON'dan türü belli liste okumak: Bir JSON dosyasından ürün record'larının listesini tür bilgisiyle oku; bilinmeyen alan içeren girdiler sessizce kabul edilmesin, hata versin.
- Yüklenebilecek alt türleri izin listesiyle sınırlamak: Girdideki tür adına göre nesne oluşturan JSON okuyucuyu yalnızca tanımlı üç bildirim türünü kabul edecek şekilde sınırla; listede olmayan tür adı reddedilsin.
Kurs hakkında
Java’nın koleksiyon çerçevesini, genel türleri ve Stream arayüzünü kullanarak büyük veriyi güvenli ve okunur kodla işlersin.
Ne öğreneceksin
- Koleksiyonlar
- Genel türler ve işlevsel stil
- Dayanıklı uygulamalar
- Bitirme
Ön koşullar
Aynı yolun 101 düzeyindeki kurslarını bitirmiş olmak ya da o konuları biliyor olmak yeterlidir.
Lab ortamı
Dersler, tarayıcında açılan sana özel bir Kali Linux terminalinde geçer. Kurulum gerekmez; lab her derste temiz başlar.
Sık sorulan sorular
- Bu kurs benim düzeyime uygun mu?
- Kurs 201 düzeyindedir; daha düşük düzeydeki kursların konularını bildiğin varsayılır.
- Kurulum gerekir mi?
- Hayır. Her ders tarayıcında açılan sana özel bir lab ortamında geçer.
- Dersler nasıl işleniyor?
- Her ders 8 ile 10 adımdan ve bir kısa sınavdan oluşur. İlk adımlarda yazman gereken komut gösterilir, sonraki adımlarda yardım azalır; iki denemede takılırsan çözüm açılır.
- Ücretsiz deneyebilir miyim?
- Evet. Her kursun ilk üç dersi ücretsizdir.