Pure Java – 68 Generics & Collections – Collection API

Merhaba Arkadaslar,
Onceki bolumlerde array konusunu gorduk. Hatirlayacagimiz gibi arraylerin belirli bir size/boyutu vardi. Cogu zaman daha esnek veri yapilarina/data structure ihtiyac olmaktadir. Java bu konuda son derece esnek olan Collection API sini sunmaktadir. Collection API , array/diziler uzerine uygulanmaktadir(implements)

OCP 6 sinavi bunyesinde olan collection interface’leri sunlardir;

  • Collection
  • List
  • Set
  • SortedSet
  • NavigableSet
  • Map
  • SortedMap
  • NavigableMap
  • Queue

OCP 6 sinavi bunyesinde olan collection siniflari
Map’ler

  • HashMap
  • Hashtable
  • TreeMap
  • LinkedHashMap

Set’ler

  • HashSet
  • LinkedHashSet
  • TreeSet

List’ler

  • ArrayList
  • LinkedList
  • Vector

Queue

  • PriorityQueue

Utility

  • Collections
  • Arrays

Bu interface ve classlar java.util paketinde yer almaktadir. Listede dikkat edelim java.util.Collection bir interface , java.util.Collections ise bir siniftir.

List , Set , Queue arabirimleri Collection arabirimini kalitmaktadir.
Map arabirimi ise Collection arabirimini kalitmaz.

collection api

Collection’lar yapilari geregi 4’e ayrilir ;

Ordered & Unordered
Bir Collection’in ordered/sirali olmasi elemanlarinin belirli/specific bir sirada eklenmesi anlamina gelmektedir. Ornegin java.util.ArrayList ordered bir yapiya sahiptir, eklendigi sirada(index based) elemanlar saklanacaktir/store.

Bir diger ornek olarak java.util.HashMap ‘e eklenen elemanlar eklendigi sirada tutulmaz , dolayisiyla unordered bir yapiya sahiptir. java.util.LinkedHashMap ya da java.util.LinkedHashSet ise eklendigi sirada(index based) elemanlar saklanir/store.

Sorted & Unsorted
Sorted/siralanmis collection yapisindan kasit belirli kurallara gore elemanlarin sirali olmasi demektir. Varsayilan olarak natural order mantigi kullanilmaktadir. Yani alfabeyi dusundugumuz zaman A harfi B harfinden once gelmektedir ya da tamsayilar icin 1 , 2 den once gelmektedir. Bu sekildeki siralama mantigina natural order denilmektedir.

Peki Car gibi bir sinif objelerini nasil siralayacagiz ? String veya sayilar icin natural order kavramindan bahsetmek mumkun degildir. Bu durumda java.util.Comparable ya da java.util.Comparator arabirimlerini kullanmamiz gerekmektedir. Ilerleyen bolumlerde bu 2 interface yapisinin kullanimi inceleyecegiz.

Sorted yapiya sahip Collection’lar ayni zamanda Ordered yapiya sahiptir fakat Ordered yapiya sahip Collection’lar Sorted degildir. java.util.TreeSet ve java.util.TreeMap , Sorted bir yapiya sahiptir.

Simdi de List, Set , Map ve Queue interfacelerini ve bu siniflari uygulayan siniflari kisaca inceleyelim

java.util.List
Bir List icin onemli olan index’tir. Metotlari index based bir yapiya sahiptir. List arabirimi uygulayan/implements java.util.ArrayList , java.util.Vector , java.util.LinkedList index based ordered bir yapiya sahiptir.

Bir List elemanlari duplicate (ayni elemandan birden fazla) yapida olabilir.

java.util.ArrayList
java.util.ArrayList , java.util.List arabirimini uygulamaktadir. Ordered bir yapiya java.util.LinkedList sahiptir fakat Sorted degildir. ArrayList’i dinamik olarak genisleyebilen array gibi dusunebiliriz. ArrayList fast iteration ve fast random access soz konusu oldugunda java.util.LinkedList’ten daha verimlidir.

java.util.LinkedList
LinkedList sinifi da benzer sekilde index based Ordered bir yapiya sahiptir. Fast Insertion/deletion islemi kullanilmaktaysa bu durumda LinkedList daha verimli olacaktir. LinkedList sinifi Deque arabirimi araciligiyla Queue arabirimini uygulamaktadir. Bu nedenle LinkedList IS-A Queue onermesi dogrudur.

java.util.Vector
Vector sinifi Java’nin 1.2 versiyonundan itibaren vardir. Vector temel olarak ArrayList’e benzemektedir fakat Vector’un metotlari thread-safe yani synchronized ‘dir. Vector sinifi yerine ArrayList tercih edilmektedir. Thread safe yapisi gerektigi durumda java.util.Collections sinifinda yer alan metotlar yardimi ile yapilmaktadir. Ilerleyen bolumlerde inceleyecegiz.

java.util.Set
Set /kume icerisinde elemanlar matematikteki kume kavraminda oldugu gibi tekil olmak zorundadir. Duplicate elemanlara izin vermez.

java.util.HashSet
HashSet unsorted ve unordered yapiya sahiptir. Elemanlari eklerken/insert hashcode degerini kullanir. Verimli/Efficient hashCode() metodu performans acisindan fayda saglayacaktir. Ordered in onemli olmadigi duplicate izin verilmeyen bir veri yapisina ihtiyac duyuldugunda HashSet kullanilabilir.

java.util.LinkedHashSet
LinkedHashSet , HashSet in ordered versiyonudur. Eklenme sirasina gore elemanlar siralanacaktir. Duplicate yapisina izin verilmeyen ve ordered bir veri yapisina ihtiyac duyuldugunda LinkedHashSet kullanilabilir.

java.util.TreeSet
TreeSet ordered ve sorted bir yapiya sahiptir.TreeSet elemanlari natural order yapida siralanir bu siralanma ascending/kucukten buyuge dogru yapida olacaktir.

java.util.Map
Map yapisi unique/essiz/tekil bir identifier/key yapisi ve bu key’e karsilik gelen value yapisi uzerine kurulmustur. Key unique olmak zorundadir fakat value duplicate olabilir.

java.util.HashMap
HashMap unsorted ve unordered yapiya sahiptir.HashSet ‘te oldugu gibi elemanlarin eklenmesi hashcode degerine goredir. Verimli/Efficient bir hashCode metodu verimlilik saglayacaktir. HashMap 1 tane null key ve birden fazla null value/deger eklememize izin verir. (key , null degerde bile olsa unique olmalidir ve value null bile olsa duplicate olabilir)

java.util.Hashtable
java.util.Vector sinifi gibi java.util.Hashtable sinifi da Javanin eski versiyonlarindan beri vardir. Hashtable ismine dikkat edelim HashTable degil Hashtable ismine sahiptir. Vector sinifi gibi Hashtable sinifi da thread-safe yapiya sahiptir.
Hashtable null key ve null value/deger eklenmesine izin vermez.

java.util.TreeMap
TreeMap , TreeSet gibi sorted ve ordered yapiya sahiptir. Benzer sekilde natural ordered yapisina uygun sekilde elemanlar siralanir. Natural ordered yapisina uygun olmayan durum icin java.util.Comparable veya java.util.Comparator arabirimlerinden yararlanilir.

java.util.Queue
Queue/kuyruk yapisi FIFO(firs in first out) kuralina gore calisir. Ordered bir yapiya sahiptir. Elemanlar sona eklenir , bastan cikartilir. (First in first out)

java.util.PriorityQueue
Java 5 te eklenen PriorityQueue priority-in , priority out yapisini uygular. PriorityQueue ordered yapiya sahiptir.

Burada Collection API’sinde yer alan arabirimleri/interface ve siniflari kisaca inceledik. Ilerleyen bolumdelerde bu siniflarla ilgili ornekleri yaparken tekrar deginecegiz.

Yazimi burada sonlandiriyorum.
Herkese Bol Javali Gunler dilerim.
Be an oracle man , import java.*;
Levent Erguder
OCP, Java SE 6 Programmer
OCE, Java EE 6 Web Component Developer

Print Friendly, PDF & Email

Leave a Reply

Your email address will not be published. Required fields are marked *