Bu yazı ile Java Collection Framework konusunda bazı bilgileri sizler paylaşmak amacındayım. Kaç bölümlük bir yazı dizisi olacağını şimdiden çıkartmam oldukça güç fakat yazdıkça MSHOWTO’da sizler ile paylaşıyor olacağım. İlk bölümde Java Collection Framework’ün bileşenlerine değinelim.
Java Collection Framework 1 – GİRİŞ
Benzer verileri grup halinde tutmak ve onlar üzerinde işlem yapmak tipik bir yazılım problemi olarak karşımıza sürekli çıkar. Örneğin bir sınıftaki öğrencilerin listesini oluşturmak, bir iskambil oyununda iskambil kartlarını karıştırmak, dağıtmak, sıralamak gibi. Java Collection Framework bu tip problemleri Amerika’yı yeniden keşfetmeden çok kolay bir şekilde çözmemizi sağlar.
Collection nesnesi kelime anlamından da anlaşılabileceği gibi içerisinde başka nesneleri barındıran bir nesnedir. Java programlama dilinde Collection bir interface olup, içerisinde benzer türden nesneleri belirli şekilde (liste halinde, sıralı, tek olacak şekilde gibi) tutacak nesnelerin en temel davranışlarını belirler. Bu en temel davranışlar beklenildiği gibi ekle, çıkar, boş mu gibi temel Collection ihtiyaçlarıdır. Java dilinde yazarsak Collection add, addAll, remove, clear, isEmpty gibi metodlar sunar.
Herbir Collection’da olması gereken bu özelliklere verilerin kullanım amaçlarına özelleşmiş farklı interface tanımları türetme yoluyla eklenir. Verilerin bir liste halinde tutulması için List, kuyruk işlemleri için (listeye girme sırasına göre listeden çıkma) Queue ve her bir verinin yalnızca bir defa olmasının istenildiği durumlar için ise Set interface’i vardır. Burada Map için ayrı bir parantez açmak gerekir. Çünkü map anahtar, değer eşleştirmesi ile verileri tutan özel bir yapıdır ve Collection interface’i ile bağlantılı değildir fakat Java Collection Framework’unun çok kullanılan bir parçasıdır.
Bu interface’leri uygulayan (implements) somut sınıflar ile Java Collection Framework tamamlanır. Somut sınıflar verilerin kullanım ihtiyacına göre gerekli her şeyi yapabilen hazır kodlardır.
List interface’ini uygulayan sınıflar
Vector, ArrayList ve LinkedList sınıflarıdır. Vektor ve ArrayList arasında ki tek fark Vektor farklı Thread’lerde güvenle çalışabilir. LinkedList sınıfı ise özel bir sınıftır. Şekil 1.den görüleceği gibi hem List hem de Queue interface’ini uygulayan bir sınıftır, dolayısıyla her iki amaçla kullanılabilir. Stack sınıfı Vektor sınıfından türemiştir ve klasik yığın işlemleri için kullanılır.
Set interface’ini uygulayan sınıflar
HashSet hash algoritmaları kullanırken, TreeSet ikili ağaç yapısı kullanır.
Queue interface’ini uygulayan sınıflar
PriorityQueue öncelik durumuna göre kuyruk işlemi yapabilen bir sınıftır. LinkedList her yeni gelen veriyi bir öncekine bağlayarak kuyruk oluşturur
Map interface’ini uygulayan sınıflar
Daha önce bahsedildiği gibi Map interface’i Collection’dan türemez. Kendi başına bir interface olup anahtar, değer eşleştirmesi ile verilerin tutulmasını sağlar. Kullandıkları algoritmalara göre Map sınıfları, HashMap, HashTable, LinkedHashMap ve TreeMap’dir.
Özetle Collection sınıfları 4 türdür.
-
Nesneleri liste halinde tutan List sınıfları
- Vector, ArrayList, LinkedList, Stack
-
Nesneleri tek olacak şekilde tutan Set sınıfları
- HashSet, TreeSet
-
Nesneleri eklenme sırasına göre düzenleyen Queue sınıfları
- PriorityQueue, LinkedList
-
Nesneleri tek bir anahtarla eşleştiren Map sınıfları
- HashMap, HashTable, LinkedHashMap, TreeMap.
Bir sonraki yazıda List sınıflarıyla devam edeceğiz.
Bu konuyla ilgili sorularınızı alt kısımda bulunan yorumlar alanını kullanarak sorabilirsiniz.
Referanslar