Java

Java Collection Nedir? Collection Türleri

Bu yazıda, oldukça geniş ve kapsamlı bir konu olan Collections konusunda giriş yapacak, Collection Interface’ini detaylı bir şekilde ele alıp, hiyerarşik olarak onun altında bulunan List, Queue ve Set’i ve bunlara bağlı olarak ArrayList, LinkedList, Vector, PriorityQueue, Deque, HashSet ve LinkedHashSet hakkında konuşacağız.

Collection Nedir

Collection, farklı türdeki dataları toplu bir şeklide tutmak ve onlar üzerinde çeşitli işlemler gerçekleştirmek için oluşturulmuş bir framework’tur. Bu framework içerisinde, farklı karakteristik özelliklere sahip, farklı yapılar yer almaktadır.

Reklam

Collection’lar çok sayıda veriyi bir arada tutmaya imkan vermelerinin yanı sıra, onları manipüle etmeye ve çeşitli amaçlarla çeşitli şekillerde kullanmaya da izin verir. Sununlan metodlar sayesinde bu yapılar üzerinde ekleme, çıkarma, sıralama gibi pek çok işlem yapılabilir.

Aşağıdaki görselde de görebileceğiniz üzere Collection aslında bir interface’dir. Bu interface’e bağlı üç farklı interface ve ve yine onların altında daha farklı class ve interface’ler bulunmaktadır.

Tablo’da da görülebileceği üzere, Collections interface’ine bağlı, üç temel interface vardır. Bunlar, List, Queue ve Set interface’leridır. Bu interface’ler sahip oldukları farklı karakteristik özellikler ile birbirlerinden ayrılmaktadırlar.

Collection Metodları

Collection interface’inde, çoklu yapılarla ilgili çeşitli işlemler yapmamıza olanak sağlayan çok sayıda metod bulunmaktadır. Bu metodlar, alt sınıflar tarafından da miras alınmıştır. Bu metodlardan bazıları şunlardır;

add(Object) Collection’a yeni bir obje eklemek için kullanılır.
addAll(Collection c) Bir Collection’daki verileri, toplu bir şekilde farklı bir Collection’a eklemek için kullanılır.
clear() Bir collection’daki tüm elemanları siler.
contains(Object o) Verilen elemanın, collection’da olup olmadığını kontrol eder. Varsa true, yoksa false return ederi.
containsAll(Collection c) Bir collection’un diğerinde olup olmadığını kontol etmek için kullanılır. Varsa, true yoksa false return eder.
equals(Object o) İki collection’un birbirine eşit olup olmadığını kontrol eder.
size() Bir collection’daki eleman sayısını int olarak return eder.
isEmpty() Eğer collection’da hiç eleman yoksa true return eder.
remove(Object o) Verilen objeyi collection’dan siler. Eğer iki tane varsa yalnızca ilkini siler.
removeAll(Collection c) Toplu silme işlemi yapmak için kullanılır.
toArray() Collection’u Array olarak return eder.

List Interface

Yukarıdaki tabloda görülebileceği üzere Collection’a bağlı interface’lerden ilki List interface’dir. Bu interface, aynı türde çok sayıda veriyi bir arada tutmak için kullanılır. List’in en karakteristik özelliği, tekrarlı verileri saklayabilmesidir. List interface’inde çok sayıda metod bulunmaktadır. Bu interface’e implement edilmiş ArrayList, LinkedList ve Vector gibi class’lar mevcuttur.

ArrayList

ArrayList’ler, bize dinamik bir yapı sunar. Array’lere nazaran daha yavaş olsalar, orada sunulmayan pek çok imkanı sunarlar. Örneğin ArrayList’te bir eleman eklediğinizde, otomatik olarak genişler sildiğinizde ise otomatik olarak daralırlar. ArrayList’ler dahili bir dizi yapısına sahiptir. Index gerektiren işlemeler yapmak için kullanılır. ArrayList’e bir eleman eklendiğinde veya silindiğinde içerisindeki tüm elemanların index’i değişir. Bu da onu yavaş yapan en önemli etkenlerden biridir.

ArrayList<String> ornekArrayList = new ArrayList<>();

LinkedList

LinkedList’ler, her biri iki bölümden oluşan node isimli yapılardan oluşur. Node şeklinde isimlendirdiğimiz bu yapıların bir tarafında data, diğer tarafında ise bir sonrakinin adresine işaret eden bir pointer bulunur. LinkedList’ler, Türkçe ismiyle Bağlı Liste’ler, bir zincirin halkaları gibidir. Bir halka çıkarıldığında, ondan önceki ile ondan sonraki otomatik olarak birbirine bağlanır. LinkedList’lerde index yapısı bulunmadığı için ve dolayısı ile, eleman ekleyip çıkarırken, her defasında yeni bir indexleme işlemi yapılmadığı için ArraylList’lere göre daha hızlıdır.

LinkedList<String> ornekLinkedkist1 = new LinkedList<>();

Vector

ArrayList ile neredeyse her açıdan aynı özellikler taşır. İkisi arasındaki en büyük fark Vector’un senkronize bir yapıya sahip olmasıdır. ArrayList’ler ise senkronize değillerdir. Yani birden fazla iş blokunu aynı anda değiştiremezler. Vector’ler aynı zamanda, Collection interface’inde yer almayan çok sayıda farklı metod içerir.

 Vector<String> ornekVector = new Vector<>();

Queue Interface

Collection interface’inin altında yer alan bir diğer  interface Queue’dur. Queue, firs-in-first-out (FIFO) yani ilk giren ilk çıkar odaklı bir yapıya sahiptir. Bu, gerçek hayattaki sıra mantığı ile aynıdır. Örnek vermek gerekirse, bankadaki işlemler, fiş alış sırasına göre ilerler. Sıra fişini ilk alanın işlemi önce yapılır. Queue, bu yapısı sebebiyle, işlenmek üzere olan elemanları tutmak için kullanılan sıralı bir liste olarak tanımlanabilir. Queue, ilk elemanı ilgilendiren pek çok metoda sahiptir. Queue’nun PriorityQueue, Deque, ve ArrayDeque gibi varyasyonları mevcuttur.

Queue<String> q1 = new PriorityQueue();  
Queue<String> q2 = new ArrayDeque();  

Deque Interface

Double-ended queue kelimelerinin kısaltması olan Deque, listenin başı ve sonu yani her iki tarafıyla da ilgili detaylı işlemler yapmamıza imkan veren bir yapıya sahiptir.

Deque d = new ArrayDeque();  

Set Interface

Set’ler, aynı türdeki verileri sırasız bir şekilde listelemek için kullanılan yapılardır. Set’leri diğerlerinden ayıran en önemli özellikleri, verileri tekrarsız bir şekilde depolamalarıdır. Bu sebeple, tekrarsız bir veri kullanacaksak veya tekrarlı verilerden kaçınmak istiyorsak, Set’leri kullanabiliriz. Set’ler HashSet, TreeSet ve LinkedSet gibi farklı bölümlere ayrılmaktadır.

HashSet

Set Inteface’ine bağlı bu yapıya eklediğiniz elemanlar, tekrarsız olacak şekilde hashcode’larına göre eklenir. Sıralama önemsiz olduğu için diğer list yapılarına göre çok daha hızlıdır. HashSet’ler null eleman kabul eder.

Reklam
HashSet<String> ornek = new HashSet<String>();

LinkedHashSet

LinkedHashSet, HashSet ile oldukça benzer bir yapıya sahiptir. Tek farkı, elemanları ekleniş sırasına göre dizmesidir. LinkedHashSet, HashSet’e nazaran daha yavaş çalışır.

LinkedHashSet<String> lhs = new LinkedHashSet<String>();

SortedSet Interface

SortedSet Interface, Set interface ile hemen hemen aynıdır. Tek fark, SortedSet’in, elemanları alfebetik olarak veya küçükten büyüğe şeklinde sıralamak için ek metodlar içermesidir.

SortedSet<String> ornek = new TreeSet();  

TreeSet

TreeSet tekrarsız elemanları “alfabetik” veya “küçükten büyüğe”(Natural Order) dizer. TreeSet, diğer set’lere göre çok daha yavaştır ve null eleman kabul etmez. SortedSet bir interface, TreeSet ise bir class’tır.

TreeSet<String> set=new TreeSet<String>();  

Collection’lar hakkında özet bilgileri en uygun şekilde aktarmaya çalıştık. Bu yazıda yer alan Collection türleri ile ilgili detaylı bilgiler sonraki yazılarda ayrı ayrı ele alınacaktır.

Author

İlgili Makaleler

4 Yorum

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Başa dön tuşu