Modül dersleri (2/2)
Koleksiyonlar ve ArrayList
Java'daki geleneksel dizilerin, oluşturulma sırasında tanımlanan sabit bir boyutu vardır. Boyutu dinamik olarak değişebilen veri listeleriyle çalışmak için Java, Java Koleksiyon Çerçevesini sağlar. En sık kullanılan sınıf ArrayList'dır.
ArrayList Sınıfı ve Jenerikler
ArrayList bellekte yeniden boyutlandırılabilir bir dizi uygular. Bir ArrayList bildirmek için, içereceği öğelerin türünü, onu < > açılı parantez içine alarak belirtmeliyiz. Bu özelliğe Jenerikler adı verilir.
ArrayList kullanmak için, onu dosyanın başında java.util.ArrayList adresinden içe aktarmalıyız.
Bildirim ve örnekleme:
import java.util.ArrayList;
ArrayList<String> shoppingList = new ArrayList<>();Temel Yöntemler
ArrayList üzerindeki temel işlemler şunlardır:
add(element): Listenin sonuna bir öğe ekler.get(index): Belirtilen dizindeki (0-indeksli) öğeyi döndürür.size(): Listede mevcut olan öğe sayısını döndürür.remove(index): Belirtilen dizindeki öğeyi kaldırır.
shoppingList.add("Pane");
shoppingList.add("Latte");
System.out.println("Elementi: " + shoppingList.size()); // Prints 2
System.out.println("Primo elemento: " + shoppingList.get(0)); // Prints "Pane"Bir Liste Üzerinde Yineleme (Her Biri İçin)
For-each döngüsü, bir koleksiyonun tüm öğelerini yinelemek için ideal yapıdır:
for (String item : shoppingList) {
System.out.println(item);
}Array vs ArrayList: Bellek ve Performans
ArrayList statik bir diziden çok daha esnek olmasına rağmen, performans ve bellek değiş tokuşlarını da beraberinde getirir:
- Statik Dizi: Bitişik bir bellek bloğuna tahsis edilmiştir, sabit bir boyuta sahiptir ve indeks yoluyla öğelere erişim son derece hızlıdır. İlkel türleri ek yük olmadan doğrudan depolar.
- ArrayList: Dahili olarak, başlangıç kapasitesi (genellikle 10) aşıldığında yeniden boyutlandırılan (daha büyük yeni bir dizi oluşturarak ve eski öğeleri kopyalayarak) bir diziyi yönetir. Üstelik yalnızca nesne referanslarını saklar ve her öğe için bellek yükü oluşturur.
Otomatik Kutulama ve Kutudan Çıkarma
ArrayList yalnızca nesneleri tutabildiğinden, Java, ilkel türler ve ilgili sarmalayıcı sınıfları arasında otomatik olarak dönüşümler gerçekleştirir:
- Otomatik Kutulama: İlkel türden sarmalayıcı sınıfa otomatik dönüştürme. Örneğin,
numbers.add(42)yazdığınızda, Java otomatik olarak42(int) değeriniInteger.valueOf(42)(Tamsayı) biçimine dönüştürür. - Kutudan çıkarma: Bir sarmalayıcı sınıftan ilkel bir türe otomatik dönüştürme. Örneğin,
int num = numbers.get(0)komutunu çalıştırdığınızda, Java dahili olarakIntegeröğesiniintbiçimine dönüştürür.
Kendin dene
ArrayList'i içe aktarın, adlandırılmış dizelerden oluşan bir ArrayList bildirin. Alice ve Bob'u listeye ekleyin, ardından size() yöntemini kullanarak boyutunu yazdırın.
İpucu göster
En üste `import java.util.ArrayList;' ifadesini ekleyin. Listeyi `ArrayList<String> names = new ArrayList<>();` ile oluşturun, öğeleri ekleyin ve boyutunu `names.size()` ile yazdırın.
3 denemeden sonra çözüm mevcut
Tamsayı adlı sayıların ArrayList'ini bildirin, 42 sayısını ekleyin ve get() işlevini kullanarak 0 dizininden alarak bunu yazdırın.
İpucu göster
`ArrayList<Integer> numaraları = new ArrayList<>();' (Integer sarmalayıcı sınıfıyla birlikte) kullanın ve bunu `System.out.println(numbers.get(0));' ile yazdırın.
3 denemeden sonra çözüm mevcut
Renkler adlı bir String ArrayList'i bildirin. Listeye Kırmızı, Yeşil ve Mavi renklerini ekleyin. Son olarak, listede ilerlemek ve her rengi ekrana yazdırmak için her biri için bir döngü kullanın.
İpucu göster
Listeyi `ArrayList<String> colours = new ArrayList<>();' ile bildirin, üç rengi ekleyin ve bunları `System.out.println(c);` kullanarak yazdırmak için `for (String c : colours)` döngüsünü kullanın.
3 denemeden sonra çözüm mevcut