Java Collections

Mehmet Bilgil
4 min readAug 17, 2020

--

Benzer verileri grup halinde tutarak onlar üzerinde işlem yapmamızı sağlayan yapıya Java Collection Framework diyoruz.

1.1 Java Collections

Collection, Interface olup içinde benzer türden nesneleri belirli şekilde tutacak, nesnelere ait temel davranışları belirler. Collection yapısı Java’da bu ihtiyaçları karşılamak için :

  • add,
  • addAll,
  • remove,
  • clear,
  • isEmpty gibi metodlar sunar.

Java Collection Framework’ün bize sağladığı avantajlar nedir diyecek olursak:

  • Veri seti üzerinde yaptığımız ekleme çıkarma işlemlerinde koleksiyonların uzunluğu (büyüklüğü) kendi kendine değişir; yazılımcı için ekstra o değişimi ayarlamak gerekmez.
  • İçerdiği veri yapılarına uygulanan algoritmalar, yazılımcının işini kolaylaştırır, üretim zamanını kısaltır, programın güvenirliğini sağlar.

Dezavantajına bakacak olursak da derleme zamanında herhangi bir veri tipi kontrolü yapmadığı için veri tipini doğru seçmemiz gerekir.

Collection framework’ün hiyerarşik yapısını (1.1) 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’da yer alan class’lar içinde for each ile dolaşabiliriz.

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 unique(eşsiz) olur, bazılarında ise böyle bir zorunluluk yoktur.

Collection Interface’e ait özellikler;

  • int size() : Collection içerisinde bulunan elemanların sayısını verir
  • boolean isEmpty() : Collection içerisinde eleman yoksa true değerini return eder.
  • boolean contains(Object element) : Parametre olarak verilen eleman Collection içerisinde mevcutsa true değerini dönderir.
  • boolean add(Object element) : Collection yapısına object ekler . Collection’ı implemente eden sınıflar bu metodu implemente etmek zorunda değildir.
  • boolean remove(Object element): Collection yapısından object remove eder . Collection ı implemente eden sınıflar bu metodu implemente etmek zorunda değildir.
  • boolean containsAll(Collections<E> c) : Bulk bir işlemdir . Verilen obje listesinin collection içerisinde var olup olmadığını kontrol eder
  • boolean addAll(Collections<E> c) : Parametre olarak verilen listeyi toplu olarak collection içerisine ekler.
  • boolean removeAll(Collections<E> c) : Parametre olarak verilen liste içerisindeki elemanları collection içerisinden remove eder.
  • boolean retainAll(Collections<E> c) :Parametre olarak verilen liste ile collection içerisindeki elemanları aynı tutar . Yani parametre olarak verilen listede olmayan elemanlar collection içerisinde çıkartılır .
  • void clear() : Liste içerisindeki elemanları çıkartır
  • Object[] toArray() : List yapısı array yapısına dönüştürülür
  • <T> T[] toArray(T[] a) : List yapısı array yapısına dönüştürülür ve list yapısının içeriği de değiştirilir .

Collection<E> interface’inin altında ise 3 farklı interface vardır :

  • Set<E>
  • List<E>
  • Queue<E>

Bu üç interface collection karakteristik özelliklerinin belirlendiği interface’lerdir.

Set Interface

Set arayüzü Collection arayüzünü extend etmiştir. Yani Collection arayüzünün metodlarını inherit eder. Set arayüzünü implemente eden tüm sınıfların ortak özelliği şudur ; duplicate objeler set içerisine atılmaz .Aynı objeyi set içerisine atmak istediğimizde set bunu ignore eder.

  • HashSet sınıfı: Bu sınıf elemanlarını bir hash tablosunda tutar. Hash tablosu elemanlarına erişimi kolaylaştırmak için elemanlarına anahtarlar vasıtasıyla ulaşılmasını sağlar.
  • LinkedHashSet Sınıfı: HashSet sınıfı ile aynı işi görmektedir. Bu sınıf elemanları koleksiyona eklenme sıralarına göre tutulmaktadır.
  • TreeSet Sınıfı: Bu sınıf set arabiriminden türeyen sortedSet arabirimini uygulamaktadır. SortedSet arabirimi koleksiyona ait elemanları sıralı olacak şekilde tutmasını sağlar.

Set Interface örnek kod bloklarını inceleyelim:

List Interface

Bu arabirim sayesinde koleksiyonumuzda tekrarlanan ya da tekrarlanmayan elemanları sıralı olarak tutabiliriz. Aynı zamanda elemanlara index yoluyla erişebiliriz.

ArrayList Sınıfı
Bu sınıf elemanlarını boyutu değişen dinamik dizilerde tutmaktadır. Yani bu sınıfa ait dizilerin boyutları azaltılabilir ya da arttırılabilir. Bir başka ifade ile bir dizinin boyutunu değiştinde ilk dizideki elemanlar yeni diziye kopyalanır.

LinkedList Sınıfı
Bağlı listeler, Bu sınıf C dilindeki bağlı listelerin javadaki görüntüsüdür. Bu tip listelerde elemanlar kendisinden sonra gelen elemanlanın bilgilerini ya da adreslerini tutarlar. Bu sınıf herhangi bir listeye eleman ekleme konusunda ArrayList sınıfından daha etkilidir.

Vektör Sınıfı
Boyutları dinamik olarak değişebilen dizilerdir. ArrayList’e benzetilebilir.

Stack Sınıfı
List arabirimini uygulayan bu sınıf vektör sınıfından türetilmiştir. Bu sınıfın özelliği en son hangi eleman kaydedilmişse sorguda ilk onu dönmesidir. (LIFO — last in fist out). Kendisine ait bazı metotları;

empty(): stack boş ise true, değilse false döner.
peek(): Stack’ın son eklenen elemanını döner.
pop(): En son elemanı döner ve listeden çıkartır.
push(eleman): Parametrede verilen elemanı stack’in sonuna ekler.
search(): Parametrede verilen elemanın stack’teki yerini döner.

List Interface örnek kod bloklarını inceleyelim:

Queue (kuyruk) Interface

Bu sınıf stack sınıfından farklı olarak özel durumlar dışında ilk giren ilk çıkar mantığı ile çalışmaktadır.
FIFO (first in first out)
Bu sınıfa ait metotlar;
add(eleman): Parametrede verilen elemanı kuyruğa ekler. İşlemin başarısız olması durumunda hata fırlatır.
offer(eleman): Parametrede verilen elemanı kuyruğa ekler. İşlemin başarısız olması durumunda null döner.
poll(): Kuyruğun başındaki elemanı kuyruktan çıkartır.
peek(): Kuyrukta sıradaki elemana ulaşmak için kullanılır.

Queue Interface örnek kod bloklarını inceleyelim:

Kaynaklar:

--

--