You are on page 1of 8

Timur Karaay, Veri Yaplar

Java Koleksiyonlar (Java Collections)

Giri Bu blmde, java standart ktphanesinde yer alan Collections topluluunu ele alacaz. Amalar Bu dersin sonunda renci unlar biliyor olacaktr: Java Collctions Framework adyla bilinen topluluu tanyacak, Collections arayzlerinde yer alan eleri tanyacak, iterators (tekrarlayclar, dngler) ile ilgili kavramlar renecektir.

Bu blm u altblmlere ayrlmtr: 1) Collections topluluu nedir? 2) Collection arayzleri 3) Eski ve yeni Collections 4) Lists 5) Sets 6) Maps 7) Collection klglama (implementations)

Timur Karaay, Veri Yaplar

Collections Nedir?
ou yazlm tek tek eler yerine elerden oluan topluluklar depolar ve onlar zerinde ilem yapar. Arrayler onlardan birisidir. Java Collections Framework, arraylerle yaplan ileri daha kolay yapt gibi, daha fazlasn da yapar. Javada bir koleksiyon (collection - bazen container, ambar diye adlandrlr) nesnelerden oluan bir topluluu bir arada tutan bir yapdr. Collections Framework ise arayzler ve onlarn kurgularndan (implementations) oluur. Olabilir ilevleri arayzler tanmlar Klg (implementation) ise, onar hayata geirir.

Java Collection Framework denilen at altnda biraraya getirilen arayz (interface) ve snflarn (class) kullanllarn ele almadan nce bu atnn avantajlarn ve dezavantajlarn bilmek yararl olabilir. Adndan da anlalaca gibi bir koleksiyon (collection) iinde bir ok eyi barndran bir nesnedir (object). eler, veri gruplarndan oluur; sral ya da srasz olabilirler. Baz baz koleksiyonlarda ayn e birden ok kez (dublikasyon) koleksiyonda yer alabilir, bazlarnda yer alamaz. Veri koleksiyonu yapmaktaki amacmz verilere eriim salamak, veriler zerinde ilem yapmak, verileri sralamak, yeni veri eklemek ya da mevcut bir veriyi silmek, bir verinin koleksiyon iinde olup olmadn aramak gibi eylemleri gerekletirebilmektir. Java Collection Frameworkun Avantajlar: 1. Veri kollleksiyonlar zerinde yukarda sralanan eylemeleri yapmaya yarayan ve API1 adn alan arayzleri renmek zorunda kalmadan, Java Collection Framework yardmyla istediimiz eylemleri gerekletirebiliriz. 2. Yazlmn tekrar kullanlmasn (software reuse) salayan arayzleri ve veriler zerinde ilem yapmaya yarayan algoritmalar ierir. 3. zel amalar iin bile olsa, programc yeniden algoritma yazmak zorunda kalmaz. 4. erdii veri yaplar onlara uygulanan algoritmalar, programcnn iini kolaylatrr, retim zamann ksaltr, programn gvenirliini salar. 5. erdii veri yaplar onlara uygulanan algoritmalar, programn performansn artrr. 6. API!lerin kullanl konusunda ortak bir dil oluturur. 7. Veri ekleyip kardka, koleksiyonlarn uzunluu (bykl) kendi kendine deiir; programcnn o deiimi ayarlamas gerekmez. Java Collection Frameworkun Dezavantajlar: 1. Derleme annda veri tipi denetimi yapamaz. 2. Veri tipini doru semek gerekir.

Application Programming Interface (API), java tarafndan hazrlanan ktphanelere verilen addr. Her birisi farkl amalar iin kullanlabilecek ok sayda API vardr ve onlar bir programcnn gerekseme duyaca hemen hemen her eyi ierirler.

Timur Karaay, Veri Yaplar

Collection Arayzleri
Collections frameworkun zn oluturan ey Collection denen arayzdr. Bu arayz frameworkun temeli olan metotlar tanmlar. List ve Set arayzleri Collection arayznde olmayan metotlar tanmlayarak, frameworkun uygulama alann geniletirler. Arayzler yalnzca metotlarn imzalarn tarlar; snflarda olduu gibi metotlarn gvdelerini (ilevi gerekletiren kodlar) iermezler. nemli bir baka arayz Map adn alr. Ancak Map arayz Collection arayznn bir genilemesi deildir. leride greceimiz nedenlerle, Map arayz Collection hiyerarisine dahil deildir; ama Collections frameworkun bir parasdr. Sylediklerimiz zetleyerek, arayzler iin u snflandrmay yazabiliriz:

Java Collection Framework

Collection: en genel grup List: nesnelerden oluan topluluk. Topluluk iinde dublikasyon olabilir, topluluun belirli bir sralamas vardr. Set: Sras olmayan ve duplikasyonu olmayan nesneler topluluu. SortedSet: Artan srada sraya dizilmi nesneler kmesi. Map: her esine bir anahtar atanm nesneler topluluu SortedMap: Anahtarlarna gre artan srada dizilmi nesneler topluluu. 3

Timur Karaay, Veri Yaplar

ekilden grld gibi, List ve Set arayzleri Collection arayzn geniletir. SortedSet arayz Set arayzn geniletir. SortedMap arayz Map arayzn geniletir. Bunlar ilerideki alt blmlerde ayrntl olarak inceleyeceiz.

Eski ve Yeni Collections


Java SDK 1.4 srmne kadar, koleksiyonlar Object snfnn altsnflar olarak ele ald. Byle olmas doald, nk Javann btn nesneleri Object snfndan elde edilir. Bu demektir ki, btn veri tipleri Object snfnn altsnflardr. Bu yaklam Javada halen geerlidir. Ancak, nesneler, bir nesneler topluluundan (koleksiyon) alndnda derleyici onlarn hangi snfa ait olduunu ayramayabiliyor ve bu durum bazen sorun yaratyor. Pratikte, bir koleksiyondaki belirli zelii olan nesnelerle ilem yaparz. Bu sorunu zmek iin Java JDK 5.0 srmnde Generics kavramn getirdi. Generics, ierdii veri tiplerini belirlemeksizin snfn tanmlanmasna izin verdi. Snfa ait nesne yaratlnca (instantiate), snfn ierdii veriler belirlenmi oluyor. Bylece, Generics yardmyla, yalnzca belirlenen tipten nesneleri ieren koleksiyonlar oluturmak mmkn olmaktadr.

Listeler (Lists)
Listeler koleksiyonlarn yaygn olarak kullanlan trdr. Array tipinin kullanld her yerde kullanlrlar. Ama veri ileme eyleminde, arrayin saladndan daha ok eye izin verirler. Listelerin her esi (terim) bellekte kendine zg bir yer tutan veri yaplardr ve ok genel ilerin yaplmasna olanak salarlar. Listeler, bir ok bakmdan arraylere benzemekle birlikte, yeni e eklendike uzunluklar kendiliinden artar; dolaysyla arraylere gre daha kullanldr. Bunun yannda, veri ilemeye yarayan ok sayda metot ierdikleri iin, programcya, arraylerin saladndan daha byk kolaylklar salar. Listeler, elerini bir dizi halinde depolar. Dizinin her hangi bir srada olmas gerekmez; ama istendiinde kolayca sralanabilirler. Ayrca, listede, ayn eler birden ok kez yer alabilir (duplicate).

Timur Karaay, Veri Yaplar

Kmeler (Sets)
Kme (set) iindeki eler, bir dizi biiminde deil, bir torbaya doldurulmu biimdedirler. Matematikteki kme kavramndan gelir. Hi esi olmayan kme bo kmedir. Kmenin bir, iki, ya da ok sayda esi olabilir. Ancak e says sonlu olmaldr. Matematikte sonsuz eli kmeleri tanmlayabilir ve onlarla ilem yapabiliriz. Ancak, bilgisayarlarda eler ve ilemler sonlu sayda olmak zorundadr. Bilgisayarlarda sonsuz sayda e tanmlanamaz, sonsuz sayda ilem yaplamaz. O nedenle, listeler iin olduu gibi, kmeler iinde e saysnn sonlu olma koulu vardr. Matematikte bir kmede ayn e birden ok kez yer alamaz. Collections iindeki Set topluluu bu kurala uyar. Set iinde ayn e ancak bir kez yer alabilir (duplikasyon olamaz). Matematikte bir kmenin eleri sral olmak zorunda deildir. Collections iindeki Set topluluu bu kurala uyar. Eer, elerin sralanmas gerekiyorsa, SortedSets altkoleksiyonu kullanlr. Listelerde olduu gibi, kmeye yeni eler eklendike, kme otomatik olarak byr; programcnn ayr kod yazmasna gerek kalmaz.

Kme (set)

List iin var olan ilemlerin (operations) ou kmeler iin de geerlidir. Ancak u kstlar vardr: Kmenin eleri sral olmad iin, yeni gelen bir eyi kmede belirli bir konuma yerletiremeyiz. Ayn nedenle, bir e yerine baka bir e koyamayz (replacement olamaz). Ama, istenen e kmeden silinebilir ve istenen e kmeye eklenebilir. Kmedeki elere erimek (retrieving) mmkndr, ama eriim sras belirsizdir. Kmede bir enin yeri belirsizdir.

Timur Karaay, Veri Yaplar

Maps (Dnmler)
Dnm (Map)ler, yapsal olarak, Listeler ve Kmelerden ok farkldr. eleri tek tek depolamak yerine nesne iftlerini depo ederler. Depolanmak istenen her eye bir anahtar verilir; bylece bir e yerine bir e ifti oluur ve bu iftler depo edilirler. Depodaki her eye kendi anahtaryla eriilir. e ifti anahtar ve deer olmak zere iki nesneden oluur. Anahtar, oluan ifti belirleyen iaretidir; deer ise anahtara ilikilendirilen bilgiyi ieren bir nesnedir. rnek: Bir adres defteri dnelim. Defter soyad srasyla dzenlenebilir. O zaman soyad anahtar olur. Her soyad ile ilikilendirilen ad, telefon_numaras, adres, doum_gn gibi bilgileri ieren bir nesne deer nesnesidir. Her anahtara karlk byle bir ve yalnz bir tane deer nesnesi vardr; ama deer nesnesi birden ok bilgi (veri) ierebilir. Map iinde anahtarlar tektir; yani ayn anahtar birden ok deeri iaret edemez. Ancak, farkl iki anahtarn iaret ettii deerlerde ayn veriler olabilir. rnein, adres defterinde farkl iki kii ayn telefonu kullanabilir ya da ayn adreste kalabilirler. Tabii, telefon defterinde soyad anahtar alnrsa, ayn soyad tayan iki kii duplikasyon yaratr. Bu durumda soyad anahtar olamaz. Byle durumlarda baka bir anahtar dnmek gerekir. rnein, defterde kaytl herkese bir sra numaras verilebilir. Kmeler iin olduu gibi, bir Map eleri sralamaz. Gerekiyorsa, anahtara gre sralama yapan SortedMap arayz kullanlr. Yeni eler geldike, Map kendi kendisinin boyunu (e saysn) artrabilir. Tersine olarak, e silinirse, Map kendi boyunu kltr.

Map (dnm)

Timur Karaay, Veri Yaplar

Aktivite 1 Aadaki topluluklarn her birisi iin en uygun yapnn (list, set, map) ne olduunu yaznz: 1) 2) 3) Bir dernek yelerine ait bilgileri kaydetmek istiyoruz. Harcamalarmz kaydetmek istiyoruz. Banka hesabmza ait bilgileri (para hareketleri yatan, ekilen- kaydetmek istiyoruz.

Geribildirim 1 1) 2) 3) Bunun iin Set uygun bir yapdr. Dernee ye olanlar kaydedilir, yelii denler silinir; yeler iin bir sralama yoktur. Bunun iin List yaps uygundur. Alverilerimizi tarih srasyla tutabiliriz. Ayn cins mal birden ok kez alabiliriz. Ayn numara ile iki banka hesab olamayaca iin Set yaps uygun olabilir. Daha iyisi, hesap numaralarn anahtar kabul eden Map yaps kullanlabilir.

Koleksiyon Klglama (Collection Implementations)


imdiye kadar koleksiyonu oluturan arayzlerden sz ettik. Ama onlarn kullanlabilmeleri iin, ilgili arayzn bir snf tarafndan klglanmas (implement) gerekir. Bu altblmde bunun nasl yapldn inceleyeceiz. Baka bir deyile, szkonusu arayzlerin klgsn yapan snflara gerekseme vardr. Aadaki snflar sz edilen arayzlerin klgsn yapan snflardr. Bu snflar Java platform library packages paketindedirler. Ancak, programc, isterse arayzlerin klgsn yapan snflar tanmlayabilir. ArrayList snf List arayzn kurgular sral listelerde hzl eriim salanr LinkedList snf da List arayzn kurgular baz zel durumlarda ArrayList dekinden daha hzl eriim salanr HashSet snf Set arayzn kurgular hzl eriim salar, ama eleri sraszdr TreeSet snf da Set arayzn kurgular HashSet den daha yavatr, ama elerini sraya koyar; bu demektir ki yap bir SortedSet olur. HashMap snf Map arayzn kurgular hzl eriim salar, ama eleri sraszdr 7

Timur Karaay, Veri Yaplar

TreeMap snf da Map arayzn kurgular HashSet den daha yavatr, ama elerini sraya koyar; bu demektir ki yap bir SortedSet olur. Uyar List bir arayz olduu iin bir List nesnesi yaratlamaz. Ama bir ArrayList ya da LinkedList nesnesi yaratlabilir. Bunlarn her ikisi de List arayznn ilevselliine sahip olur.

You might also like