Java Collection Framework (Türkçe)

Kamer Elciyar
May 19 · 3 min read

Merhabalar. Bu yazımda Java Collection Framework’ten bahsedeceğim. Öncelikle Oracle’ın sitesinden Java 8 Dokümanlarını inceleyelim.

Merhabalar. Bu yazımda Java Collection Framework’ten bahsedeceğim. Öncelikle Oracle’ın sitesinden Java 8 Dokümanlarını inceleyelim.

java.util paketinde yer alan collection framework’ün hiyerarşik yapısını incelediğimizde en üstte karşımıza Iterable<T> interface’i çıkar. Bu interface’in özelliği kendisini implement eden objeyi for each döngüsünde kullanılabilir hale getirmektir. Dolayısıyla collection framework’te bulunan tüm class’ların içinde for each ile gezebileceğimiz çıkarımını yapabiliriz.

Iterable<T> interface’inin altında karşımıza Collection<E> interface’i çıkar. Collection, element adı verilen objelerin gruplarını temsil eder. Bazı collection’lar sıralı olur, bazıları sırasız; bazılarında tüm elementler eşsiz olur, bazılarında ise böyle bir zorunluluk yoktur. Bunları ihtiyaçlarımıza göre kullanırız.

Collection<E> interface’inin altında ise 3 farklı interface vardır. Set<E>, List<E> ve Queue<E>. Bu üç interface collection karakteristik özelliklerinin belirlendiği interface’lerdir.

1. Set<E>

Set’in karakteristik özelliği aynı elemandan birden fazla olmasına izin vermemesi ve birden fazla null eleman kabul etmemesidir. Yani e1 ve e2 elementleri için e1.equals(e2) ise bu iki eleman aynı Set içinde barınamaz. Şimdi Set<E> interface’inden türetilen diğer collection framework üyelerine bakalım.

● HashSet<E>

HashSet<E>’te veriler hashleme yöntemi ile tutulur. Verilerin sırasının korunacağını garanti etmez. Yani önce e1, sonra e2 elementini kaydedip e2, e1 sırasında çekebilirsiniz. Aynı zamanda HashSet<E> non-synchronized olduğu için birden fazla thread aynı anda bir HashSet’e erişip değiştirmeye çalışırsa problem yaşamamak için manuel bir çözüm olarak synchronized erişim sağlamalıyız.

Bu kodun çıktısı bende aşağıdaki gibi oldu. Sıralama sizde daha farklı olabilir. Çünkü bildiğiniz üzere HashSet’lerde çıktı rastgele sırayla verilir.

● LinkedHashSet<E>

HashSet’ten tek farkı, eklenen elementlerin ekleme sırasına göre tutulmasıdır. (Insertion order) Tekrarlı element eklendiğinde ilk eklenen element bundan etkilenmez.

Bu kodun çıktısı aşağıdaki gibidir:

● TreeSet<E>

TreeSet’lerde elementler artan sıralamayla, yani ascending order ile tutulur. null element kabul etmez. Eklenmeye çalışılırsa NullPointerException hatası verir.

Bu kodun çıktısı aşağıdaki gibi olacaktı:

2. List<E>

List’in karakteristik özellikleri tekrarlı elementlere izin vermesi, elementleri ekleme sırasına göre tutması ve istediğimiz index’e element eklememize izin vermesidir.

● ArrayList<E>

Collection framework’te en çok kullanılan class’tır. List özelliklerini barındırır.

Kodun çıktısı aşağıdaki gibidir:

ArrayList -> Ankara Amasya Sivas Isparta İzmir Eskişehir Amasya

● LinkedList<E>

Sonuçları bakımından ArrayList ile aynıdır. Fakat aralarında bazı farklar mevcuttur. Arama işlemlerinde LinkedList O(n) iken ArrayList’te O(1)’dir. Silme işlemlerinde ise ArrayList O(n) iken LinkedList O(1)’dir. Ekleme işlemleri de aynı sonuçları verir. Dolayısıyla eğer ekleme ve silme işlemleri sık yapılacaksa LinkedList kullanmak daha avantajlıdır. Arama işlemleri sık yapılacak ise de ArrayList daha avantajlıdır.

Kodun çıktısı aşağıdaki gibidir:

● Vector<E>

Vector, nadiren kullanılan bir classtır. Şimdiye kadar hiç kullanıldığını görmedim. Sychronized bir collection’dır ve varsayılan kapasitesi 10’dur. 11. element eklenirken kapasitesini 20 yapar. 21. elementi eklerken 40 yapar. Varsayılan kapasite ve artış değerlerini kullanıcı belirleyebilir.

3. Queue<E>

Queue interface’i FIFO (first in first out) prensibini uygular. Yani sıraya ilk giren kişi ilk çıkar. Günlük hayattaki market sırası gibidir. Bu da çok kullanılmadığı için örnek vermiyorum.

4. Map<K, V>

Map interface’i collection sınıfına dahil değildir fakat benzer amaçlar taşıdığı aynı başlık altında öğretilir. Map’ler eşleme tablolarıdır. Bir Map’te tekrarlı key olamaz. Tüm value’lar bir key ile eşlenir ve bu key ile çağrılır.

● HashMap<K, V>

HashMap’ler sıralamayı garanti etmez. null key ve null value kabul eder.

Bu kodun çıktısı aşağıdaki gibidir:

● TreeMap<K, V>

HashMap’lerden farkı, elementleri artan sıralama (ascending) ile tutmasıdır.

Bu kodun çıktısı aşağıdaki gibidir:

TreeMap -> 1.Kakao | 2.Un | 3.Süt | 4.Yumurta |

● HashTable<K, V>

HashMap ile benzerdir fakat aralarında bazı farklar mevcuttur. HashTable sychronized’tır, dolayısıyla performansı düşüktür. HashMap null değer alırken HashTable almaz.

Kodun çıktısı aşağıdaki gibidir:

Kodlara ait Github linki: https://github.com/kamer/Java-Collection-Framework

Kamer Elciyar

Written by

Java | Spring | VueJS | Hyperledger | https://kamerelciyar.com k.elciyar@gmail.com

Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade