Java’da Collections Framework

Duygu Orhan
folksdev
Published in
3 min readApr 3, 2024

Merhaba! Collections Framework’leri paylaştığım blog serisine hoş geldiniz🥳 Bu yazımda Collections Framework’ten bahsettim ve alt başlıklarını genel olarak inceleyip detaylı olarak incelediğim yazıları da ilgili başlıklara ekledim.

Keyifli okumalar dilerim 💝 ✨

Collections Framework

Collections Framework, bir grup nesnenin tek bir varlık olarak temsil edilmesini ve yönetilmesini sağlayan gelişmiş sınıf (class) ve arayüzlerden (interface) oluşmuştur. Yani Collections Framework için nesnelerden oluşmuş gruplama çeşitleri diyebiliriz. Nesnelerin tutulma şekli seçilen koleksiyon tipine göre farklılık göstermektedir.

Collections Framework, temelinde iki ana interface’den oluşmaktadır: Collection Interface’i ve Map Interface’i.

Collections Framework Hiyerarşisi

Collections Framework sayesinde kod karmaşıklığı olmadan, kod tekrarı yapmadan nesneler tutulur ve üzerlerinde işlemler kolaylıkla yapılır. Bu yapıların geliştiriciler için önemli avantajı interface’leri öğrenmelerine gerek kalmadan Collections Framework yardımıyla Collection ve Map sınıfları üzerinde kolaylıkla işlem gerçekleştirebilmesidir.

Iterable Interface

Iterable, Collection yapısının ilk basamağıdır. Bu interface sayesinde Collection sınıfından türemiş olan sınıf nesnelerinin öğeleri teker teker erişilebilir olmuştur ve kolaylaşmıştır. Iterable interface’i ile Collection Framework’ünde bulunan sınıflara for-each döngüsü ile erişebilir. Bu interface haricinde for döngüsü ya da Iterator sınıfı ile sınıflara erişilebilir ancak for-each metodu diğer iki yönteme göre kullanımı daha temizdir.

Aşağıdaki kodda incelenecek olunursa for-each ile yazılan kod bloğunun daha okunabilir olduğu görülmüştür.


import java.util.*;
public class Main {
public static void main(String[] args) {

List<Integer> numberList = new ArrayList<>();
numberList.add(21);
numberList.add(22);
numberList.add(23);

//for-each döngüsü
for (Integer i : numberList) {
System.out.println(i);
}

//for döngüsü
for (int i = 0; i < numberList.size(); i++) {
System.out.println(numberList.get(i));
}
//iterator() metodu
Iterator<Integer> i = numberList.iterator();
while (i.hasNext()) {
System.out.println(i.next());
}
}
}

Collection Interface

Collection interface, listeleme şeklinde verileri tutan bir yapıda hangi işlemlerin olması gerektiğini bildiren bir interface’dir. İlgili sınıflar bu interface’den türeyerek çeşitli şekilde verilerin tutulması ve işlenebilmesi sağlamıştır. Collection interface’in alt sınıfları java.util paketi altında toplanmıştır. Collection interface’inden türeyen alt sınıflar Collection interface’nin temel fonksiyonlarını uygular veya özelleştirerek uygular.

Collection interface’nin 3 alt interface’i bulunmaktadır: List, Queue ve Set.

List

List interface, öğeleri sıralı bir şekilde saklayabilen, boyutu dinamik olarak değişebilen yani öğe eklendikçe boyutu artabilen silindikçe boyutu azalabilen, aynı nesnelerin birden fazla olabilmesine olanak sağlayan, her bir nesne için bellekte ayrı yer tutan, boş elemanların da saklanabildiği bir koleksiyon türüdür.

List Interface’nin 3 ana sınıfı vardır: ArrayList, Vector, LinkedList.

Queue

Queue interface, verileri işlem sırasına (kuyruk) göre tutan veri yapısıdır. Collection interface’den miras alınmıştır. FIFO(First-In-First-Out) mantığına dayalı çalışma yapısı vardır. Kuyruğa eklenen ilk eleman ilk önce işlenir. Böylelikle işlem kuyruğu için veriler sıralı bir şekilde tutulmuş olur.

Queue’nin bir ana sınıfı ve bir alt interface’i vardır: PriortyQueue sınıfı ve Deque interface.

List Interface’i ve Queue Interface’i ve Implemantasyonlarını daha detaylı incelediğim yazıma buradan erişebilirsiniz 👇🏻

Set

Set interface’i matematikte kullandığımız kümelemenin soyutlanmış halidir. Kümelemede bir elemandan sadece bir tane vardır yani yinelenen eleman yoktur. Collection interface’inden miras alınmıştır ve yinelenen öğeleri kısıtlayan özellikler eklenmiştir.

Set interface’in 3 ana sınıfı vardır: HashSet, LinkedHashSet ve TreeSet.

Set Interface’i ve Implemantasyonları için daha detaylı incelediğim yazıma buradan erişebilirsiniz 👇🏻

Map Interface

Map Interface’i , anahtahtar-değer (K,V) çiftlerinden oluşmaktadır. Burada anahtar değerlerimiz benzersizdir, tekrar edilemez. Her anahtar yalnızca bir değerle eşleşebilir.

Map interface’nin 3 ana sınıfı bulunmaktadır: HashMap, LinkedHashMap ve TreeMap.

Map Interface ve Implemantasyonlarınıdaha detaylı incelediğim yazıma buradan erişebilirsiniz 👇🏻

Collection interface ve Map interface anlatılan Collections Framework’ün iki farklı türüdür. Aralarındaki bazı farklar:

  • Kullanım yapısı ve verileri saklama biçimi: Collection da veriler tekil şekilde tutularak gruplandırılır. Map de veriler anahtar-değer çiftlerinden oluşarak gruplandırılır.
  • Verilere erişim: Collection da verilere indeksler veya döngüler aracılığıyla erişilebilir. Map de anahtar değerlerine göre erişim sağlanmaktadır.
  • Benzersiz veriler: Collection da sadece Set sınıfı benzersiz veriler içerir ve o veri sadece bir kere eklenir. Diğer sınıflarında veriler tekrarlanabilir. Map de ise anahtar değerleri benzersizdir ve ayrıca değerler benzersiz olmak zorunda değildir, bir değer birden fazla anahtarla eşleştirilebilir.

Generic Type <T> Collections Framework içerisinde sınıf ve interfaceler’i kullanırken gerekli yerlerde sürekli olarak yazdığımız “<>” yapısı yani Generic Type, hangi referans tiplerini alacağına karar verildiği yapıdır. Bu yapı sayesinde tip güvenliği sağlanmış olur, belirtilen tip haricinde öğe eklenmesine izin vermez.

Okuduğunuz için teşekkür ederim. Umarım sizler için faydalı bir yazı olmuştur 🫶🏻

Eğer yazılarım ilginizi çekiyorsa beni takip etmeyi unutmayın ✨💐
X | LinkedIn | GitHub

Bir sonraki yazıda görüşmek üzere, sağlıcakla kalın🙌🏻

--

--