8. Bölüm Torbalar (Collections)

advertisement
y
ca
de
m
Java ile Nesne Merkezli ve Fonksiyonel
Programlama
w
w
w
.s
el
so
f
t.a
8. Bölüm
Torbalar
(Collections)
Akın Kaldıroğlu
www.javaturk.org
Ocak2017
ca
de
m
y
Küçük Ama Önemli Bir Konu
Ø Budosyaveberaberindekitüm,dosya,kod,vb.eğitimmalzemelerinintüm
w
Ø
w
Ø
w
.s
el
so
f
Ø
t.a
Ø
haklarıSelsoft Yazılım,Danışmanlık,EğitimveTic.Ltd.Şti.’ne aittir.
Bueğitimmalzemelerinikişiselbilgilenmevegelişiminizamacıyla
kullanabilirsinizveisteyenlerihttp://www.selsoft.academy adresine
yönlendirip,bumalzemelerinengüncelhallerinialmalarınısağlayabilirsiniz.
Yukarıdabahsedilenamaçdışında,bueğitimmalzemelerinin,ticari
olsun/olmasınherhangibirşekilde,toplubireğitimfaaliyetindekullanılması,
buamacayönelikolsun/olmasınbasılması,dağıtılması,gerçekyada
sanal/Internetortamlarındayayınlanmasıyasaktır.Böylebirihtiyaçhalinde
lütfenbenimle,akin.kaldiroglu@selsoft.academy adresindeniletişimegeçin.
Buvebenzerieğitimmalzemelerinekatkıdabulunmakyadadüzeltmeve
eleştirilerinizibanailetmekistersenizçoksevinirim.
BolJava’lıgünlerdilerim.
www.selsoft.academy
2
ca
de
m
y
İçerik
Ø Bubölümde,torbalar(collections)elealınacaktır.
w
w
w
.s
el
so
f
t.a
Ø Java’nıntorbaçatısı(collectionframework)vebuçatı
altındakiarayüzler,gerçekleştirmelerivealgoritmalar
incelenecektir.
www.javaturk.org
3
y
ca
de
m
t.a
w
w
w
.s
el
so
f
Torbalar (Collections)
www.javaturk.org
4
ca
de
m
y
TorbaNedir?
w
w
.s
el
so
f
t.a
Ø Programlamadillerindekibirdenfazladeğişkenibirarada
tutanyapılaratorba(collection)denir.
Ø Bazıdillerdefarklışekildeifadeedilirler,örneğinC++’da
container denir.
Ø Torbalar,isterilkeltiplerdenisterisekarmaşıktiplerden
olsun,birdenfazladeğişkenigrupolaraktekbiryapıaltında
tutarveyönetir.
Ø Torbalar,dildediğerverilergibideğişkenlerleifadeedilirve
metotlarageçilir,metotlardandöndürülür,vs.
w
Ø Programlamadillerindefarklıözelliklerlekurgulanmışve
farklıamaçlarasahippekçoktorbavardır.
www.javaturk.org
5
ca
de
m
y
VeriYapıları(DataStructures)
t.a
Ø ÜniversitelerdeVeriYapıları(DataStructures)adıyla
öğretilenderslertemeldetorbalarıniçyapılarıveilgili
bellek,depolamavs.gibimekanizmalaraodaklanırlar.
w
w
w
.s
el
so
f
Ø Buanlamdatorbalar,SoyutVeriYapıları’nın (Abstract Data
Types)birparçasıdır.
www.javaturk.org
6
y
ca
de
m
Torba Çeşitleri - I
Ø Farklı amaca yönelik farklı torbalar söz konusudur.
Torbaların iç yapısı farklı olsa biledışarıya açılan arayüzü,dizi (array)
görünümündedir.Dolayısıyle torbadaki elemanlara dizi elemanıymış
gibi yaklaşılır.
so
f
Ø
t.a
Ø Torbaların şu üç tipinden bahsedilebilir:
Ø Doğrusal (lineer)torbalar:Elemanlarını dizili (ordered)tutan
torbalardır.
el
Ø İlişkilendiren (associative)torbalar:Bir girdiye karşılık bir
w
Ø
Torba dizi olarak görünmez ve torbadaki elemanlar farklı nesnelerle
ilişkilendirilerek tutulur.
Butür torbalara “sözlük”(dictionary)dedenir çünkü elemanları
“anahtar-değer ikilisi”(key-valuepair)yapısındadır.
w
Ø
w
.s
çıktı üreten,fonksiyon gibi davranan torbalardır.
www.javaturk.org
7
y
ca
de
m
Torba Çeşitleri - II
Ø Graf(graph)torbalar:Bir elemanı birden fazla
w
w
w
.s
el
so
f
t.a
ilişkilendiren torbalardır.
elemanla
www.javaturk.org
8
y
ca
de
m
Torbaların Özellikleri
w
w
w
.s
el
so
f
t.a
Ø Torbalarda farklı özellikler söz konusudur:
Ø Elemanları tekil olan torbalar ile aynı elemandan birden
fazlaya izin veren torbalar,
Ø Elemanlarını dizili (ordered)torbalar ile bir diziye sahip
olmayan torbalar,
Ø Elemanlarını sıralı (sorted)torbalar ile bir sıraya sahip
olmayan torbalar,
Ø Elemanlarına dizili bir erişim sağlayan torbalar ile sağlamayan
torbalar,
Ø Elemanlarına erişimi dizideki yeri ile yapan torbalar ile özel
anahtar kullanan torbalar.
www.javaturk.org
9
y
ca
de
m
t.a
w
w
w
.s
el
so
f
Java’da Torbalar
www.javaturk.org
10
ca
de
m
y
TorbaÇatısı(CollectionFramework)
Ø Java,tümdillergibi,pekçoktorbayasahiptir.
w
w
w
.s
el
so
f
t.a
Ø Javailkçıkışındasahipolduğutorbayapılarını1.2
sürümündegenişletmişvebirçatıhalinegetirmiştir.
Ø Torbaçatısı(collectionframework)
Ø Java’nıntorbaçatısıjava.util paketialtındadırve
temeldeşuyapılardanoluşmaktadır:
Ø Arayüzler(interfaces)
Ø Gerçekleştirmeleri(implementations)
Ø Algoritmalar(algorithms)ve
Ø yardımcıyapılar.
www.javaturk.org
11
ca
de
m
y
EskiTorbalar
İlişkilidizi(associativearray)dedenir.
el
Ø
so
f
t.a
Ø JavaSE’nin ilksürümünde3tanetorbavardı:
Ø Dizi(array),boyutudeğişmeyenvehomojendizi,
Ø java.util.Vector, dinamikveheterojendizi,
Ø java.util.Hashtable, dinamikveheterojen,sözlük
(dictionary)yapısı.
w
w
w
.s
Ø JavaSE1.2sürümüylebirliktegelentorbaçerçevesi
(collectionframework)buyapılaryerineçokdahayetkinve
sistemliyeniyapılargetirdi.
www.javaturk.org
12
t.a
so
f
w
w
w
.s
el
Ø Javatorbalarınıiki
farklıhiyerarşiile
ifadeetmek
mümkündür.
Ø İlkhiyerarşi
doğrusal
torbalarınana
arayüzleri,ikinci
hiyerarşiise
ilişkilendiren
torbalarınana
arayüzleridir.
ca
de
m
y
Arayüzler
www.javaturk.org
13
y
ca
de
m
CollectionArayüzü - I
Ø Collection arayüzü doğrusal torbaların kök arayüzüdür.
w
.s
el
so
f
t.a
Ø Engenel torba davranışlarını bir araya getirmiştir:
Ø Ekleme add()ve çıkarma remove(),boşaltma clear()
Ø Bilgi almaiterator() (iterator,nesneleri tek tek geri veren
yapıdır)
Ø Sorgulama isEmpty(), contains(),size()
Ø Dönüştürme toArray()
w
w
Ø JavaSE1.8’detoplam 17tane metodu vardır.
Ø Doğrudan bir gerçekleştirmesi yoktur.
Ø Altarayüzlerinin gerçekleştirmeleri vardır.
www.javaturk.org
14
add(E e)
boolean
addAll(Collection<? extends E> c)
void
clear()
boolean
contains(Object o)
boolean
containsAll(Collection<?> c)
boolean
isEmpty()
Iterator<E>
iterator()
so
f
t.a
ca
de
m
y
boolean
el
default Stream<E> parallelStream()
boolean
remove(Object o)
w
.s
boolean
w
default boolean
w
boolean
removeAll(Collection<?> c)
removeIf(Predicate<? super E> filter)
retainAll(Collection<?> c)
www.javaturk.org
15
y
ca
de
m
int
size()
default Spliterator<E> spliterator()
toArray(T[] a)
w
w
w
.s
el
<T> T[]
toArray()
so
f
Object[]
stream()
t.a
default Stream<E>
www.javaturk.org
16
y
ca
de
m
CollectionArayüzü - II
so
f
t.a
Ø Collection arayüzünün metotları daima java.lang.Object
üzerinden çalışır.
Ø Dolayısıyla tüm Collection nesneleri engenel tipolan Object
üzerinden işlem yaparlar.
w
w
w
.s
el
Ø Butabi olarak çok şekilliliğin (polymorphism)bir sonucudur.
Ø Budurumun negatif tarafı ise daha alttipten nesnelerin
gerçek tiplerini gösterememeleridir.
Ø Buyüzden bir Collection’dan alınan nesnenin gerçek tipine
ulaşmak istendiğinde instanceof operatörüne ve downcaste
ihtiyaç duyulur.
www.javaturk.org
17
y
ca
de
m
t.a
w
w
w
.s
el
so
f
Bazı Arayüzler
www.javaturk.org
18
ca
de
m
t.a
so
f
el
w
w
w
.s
Ø Daha önce
çizilen sınıf
diyagramını
diğer
doğrusal
torbalarla
ilgili
arayüzlerini
zenginleştirebiliriz.
y
Tüm Arayüzler
www.javaturk.org
19
y
ca
de
m
IteratorArayüzü - I
so
f
t.a
Ø Collection’un tipindeki torbalarda elemanlara ulaşmanın
yöntemi java.util.Iterator arayüzüdür.
Ø Iterator arayüzü Java’ya 1.2ile birlikte katılmıştır.
Ø Java’da enbaştan bu yana var olan java.util.Enumeration
arayüzünün yerine geçmiştir.
next()
w
.s
E
hasNext()
el
boolean
w
default void
forEachRemaining(Consumer<? super E> action)
w
default void
remove()
www.javaturk.org
20
y
ca
de
m
IteratorArayüzü - II
w
w
w
.s
el
so
f
t.a
Ø Iterator,elemanlarını verdiği torba nesnesinden silme de
yapar.
Ø Buamaçla konulmuş olan remove() metodu herbir next()
çağrısı için sadece bir defa çağrılmalıdır.
Ø Eğer bir Collection nesnesinden Iterator nesnesini
alındıktan sonra oCollection nesnesi doğrudan add() ya da
remove() metodu ile değiştirilirse,ilknext() metodunda
java.util.ConcurrentModificationException sıra dışı durumu
oluşur.
Ø Bunafail-fastdenir,yani iteratordurumu algılar algılamaz
hata verir.
www.javaturk.org
21
y
ca
de
m
IteratorArayüzü - III
t.a
Ø Buyüzden Iterator oluşturulduktan sonra Collection’dan
silmeler Iterator üzerindeki remove() metodu ile
yapılmalıdır.
w
w
w
.s
el
so
f
Ø Eklemeler ise Collection’dan henüz Iterator alınmadan önce
tamamlanmalıdır.
www.javaturk.org
22
y
w
w
w
.s
el
so
f
t.a
ca
de
m
IteratorExample.java
www.javaturk.org
23
y
ca
de
m
Iterable Arayüzü - I
t.a
Ø java.lang.Iterable arayüzü,gerçekleştiren nesnelerin
elemanlarının for-eachalınabilmesini sağlar.
Ø for-eachkullanım açısından Iterator kullanımından çok daha
şık ve rahattır.
w
.s
default void
el
so
f
Ø Tüm Collection nesneleri Iterable’dırlar.
Ø Ama diziler (arrays)Iterable değildirler.Neden?
iterator()
w
Iterator<T>
forEach(Consumer<? super T> action)
w
default Spliterator<T> spliterator()
www.javaturk.org
24
y
w
w
w
.s
el
so
f
t.a
ca
de
m
IterableExample.java
www.javaturk.org
25
y
ca
de
m
ComparableArayüzü
Örneğin Boolean.FALSE <Boolean.TRUE
el
Ø
so
f
t.a
Ø java.lang.Comparable arayüzü,onu gerçekleştiren
nesnelerin sıralamasında kullanılır.
Ø Comparable,Java’ya 1.2ile birlikte katılmıştır.
Ø JavaAPI’sindeki şu sınıflar bu arayüzü gerçekleştirirler,
dolayısıyla databi sıralamaya (naturalordering)sahiptirler:
Ø Tüm sarmalayan tipler (Integer,Long,Double,Boolean vs.)
w
.s
Ø BigInteger,BigDecimal,
Ø String,Date,File
w
w
Ø Comparable arayüzünün tek bir metodu vardır.
int
compareTo(T o)
www.javaturk.org
26
y
w
w
w
.s
el
so
f
t.a
ca
de
m
ComparableExample.java
www.javaturk.org
27
y
ca
de
m
ComparatorArayüzü
t.a
Ø Eğer sıralanacak nesneler Comparablearayüzünü
gerçekleştirmiyorlarsa neyapılabilir?
Ø java.util.Comparator arayüzü,Comparablearayüzünü
gerçekleştirmeyen nesnelerin sıralamasında kullanılır.
w
.s
el
so
f
Ø Comparatorarayüzü Java’ya 1.2ile birlikte katılmıştır.
Ø JavaSE1.8’ekadar tek bir metodu vardı.
Ø JavaSE1.8’depek çok default ve static metot eklenmiştir.
compare(T o1, T o2)
w
w
int
www.javaturk.org
28
y
w
w
w
.s
el
so
f
t.a
ca
de
m
ComparatorExample.java
www.javaturk.org
29
y
ca
de
m
Collection’un AltTipleri
Ø Collection’un doğrudan bir gerçekleştirmesi yoktur.
so
f
t.a
Ø Ama iki önemli altarayüzü vardır:
Ø Set
Ø List
w
w
.s
el
Ø Set,kümedir,tuttuğu nesneler tekil olmalıdır,aynı
nesnelerden birden fazla tutmaz.
Ø List ise dinamik dizidir.
w
Ø Buiki arayüzün gerçekleştirmeleri vardır.
www.javaturk.org
30
y
ca
de
m
t.a
w
w
w
.s
el
so
f
Set ve Gerçekleştirmeleri
www.javaturk.org
31
ca
de
m
y
SetArayüzü - I
Ø Setarayüzü,Matematik’teki kümeyi temsil eder.
so
f
t.a
Ø Setarayüzü,Collectionarayüzünden devraldığı davranışlara
bir ekleme yapmaz.
Ø Sadece ekleme ile (add())ilgili bir kısıt koyar,tekil nesneler
tutar.
w
w
w
.s
el
Ø Entemel iki özelliği:
Ø Elemanları tekil olmalıdır,dolayısıyla aynı elemandan birden
fazla tutmaz.
Ø Dizme kavramı yoktur.
Ø Dolayısıyla içindeki elemanlara ancak Iterator ile ulaşılabilir.
www.javaturk.org
32
ca
de
m
y
SetArayüzü - II
so
f
t.a
Ø Torbanın içindeki elemanların daima tekil olmaları
sebebiyle Setgerçekleştirmeleri daha çok
Ø Bir kişinin kredi kartları,evleri,araçları ya da
Ø Bir ailenin fertleri
Ø gibi tekillik gerektiren durumlarda kullanılır.
w
w
w
.s
el
Ø Çünkü Sethereleman eklenmesinde,yani add()
metodunda aynılık kontrolü yapar.
www.javaturk.org
33
w
w
w
.s
el
so
f
t.a
Ø Setarayüzünün entemel
iki gerçekleştirmesi
vardır:
Ø HashSet,Set’i doğrudan
gerçekleştirir ve ensık
kullanılandır.
Ø TreeSet ise Set’in alt
arayüzleri olan SortedSet
ve NavigableSet
arayüzlerini de
gerçekleştirir ve genelde
sadece sıralama
gerektiğinde kullanılır.
ca
de
m
y
SetArayüzü - III
www.javaturk.org
34
y
ca
de
m
t.a
w
w
w
.s
el
so
f
HashSet
www.javaturk.org
35
ca
de
m
y
SetGerçekleştirmesi:HashSet - I
t.a
Ø HashSet,arka tarafta bir HashMap tarafından desteklenen
bir Set gerçekleştirmesidir.
Ø HashSet,herhangi bir dizilim sözü vermez,var olan dizilim
zamaniçinde değişebilir.
el
so
f
Ø HashSet,null referanslara izin verir.
Ø HashSet,temel fonksiyonlarda (add(),remove(),contains(),
ve size())sabite yakın,O(1),bir performans sağlar.
w
w
w
.s
Ø HashSet,bir Set,olduğundan elemanlarına ancak Iterator
ile erişilebilir.
Ø Budaeleman sayısıyla orantılı,lineer bir performans sağlar.
www.javaturk.org
36
ca
de
m
y
SetGerçekleştirmesi:HashSet - II
el
HashSet()
so
f
t.a
Ø HashSet,4tane kurucu metoda sahiptir.
Ø Varsayılan kurucu başlangıç kapasitesi 16ve doluluk oranı
0,75olan boş bir HashSet oluşturur.
Ø Arzu edilirse HashSet oluşturulurken başlangıç kapasitesi ve
doluluk oranı verilebilir.
w
.s
HashSet(Collection<? extends E> c)
HashSet(int initialCapacity)
w
w
HashSet(int initialCapacity, float loadFactor)
www.javaturk.org
37
y
ca
de
m
FindDuplicates.java
Ø HashSet’ten içindeki elemanları iteratoryoluyla alınmasına
dikkat edin.
so
f
t.a
Ø Elemanlar hangi sırayla geliyorlar?
w
w
w
.s
el
Ø Eleman eklenirken dizilim değişiyor mu?
www.javaturk.org
38
ca
de
m
y
SetGerçekleştirmesi:HashSet - III
Ø Set arayüzü için “elemanları tekil olmalıdır,dolayısıyla aynı
elemandan birden fazla tutmaz.”dendi.
w
w
w
.s
el
so
f
t.a
Ø HashSet,iki elemanın aynı olup olmadığını nasıl anlar?
www.javaturk.org
39
ca
de
m
y
SetWithDuplicatedObjects.java
el
so
f
t.a
Ø Örneği Employeesınıfının aşağıda belirtilen farklı
şekilleriyle çalıştırın:
Ø equals()ve hashCode() overrideedilmemiş,
Ø Sadece equals() overrideedilmiş,
Ø Sadece hashCode() overrideedilmiş,
Ø Hemequals()ve hashCode() overrideedilmiş.
w
w
w
.s
Ø Hangi durumda HashSet’in birbirinin aynı olan
nesnelerden sadece bir tane tuttuğunu gözlemlediniz?
www.javaturk.org
40
ca
de
m
y
SetGerçekleştirmesi:HashSet - IV
w
w
w
.s
el
so
f
t.a
Ø HashSet,iki elemanın aynı olup olmadığını şöyle belirlemek
için eklenen nesnelerin equals() ve hashCode() metotlarını
çağırır ve ilkinden true ikincisinden aynı int değer dönerse,
bu iki nesnenin aynı olduğuna karar verir.
Ø Çağrı sırası ise şöyledir:
Ø Önce hashCode() metodu çağrılır,
Ø Dönen sonuçlar aynı ise equals()metodu çağrılır,
Ø Buçağrı datrue döndürürse nesnenin aynısının zaten torbada
olduğuna karar verilir,
Ø Ve add() metodu ekleme yapmadan false döndürür.
Ø Buiki çağrıdan birisi için aksi durumolursa eleman eklenir ve
add() metodu true döndürür.
www.javaturk.org
41
ca
de
m
y
SetGerçekleştirmesi:HashSet - V
Ø Tüm sarmalayan
tipler (Integer,Long,Double,Boolean vs.)
Örneğin Boolean.FALSE <Boolean.TRUE
el
Ø
so
f
t.a
Ø JavaAPI’sindeki aşağıdaki tiplerin equals() ve hashCode()
metotları olması gerektiği gibi overrideedildiğinden bu
tiplerin nesneleri tabi olarak aynılık-farklılık kontrolünden
geçerler:
w
.s
Ø BigInteger,BigDecimal,
w
w
Ø String,Date,File
www.javaturk.org
42
ca
de
m
y
Hashingve HashFonksiyonları
Ø HashSet arka planda bir HashMap tarafından desteklenir.
t.a
Ø Buyapılarda adı geçen “hash”nedir?
Ø Hash,girdilerine karşılık bir tamsayı değer üreten
fonksiyonlara verilen genel bir isimdir.
w
w
w
.s
el
so
f
Ø Hashfonksiyonlarının herbir farklı girdi için farklı değer
üretmesi beklenir.
Ø Böyle hashfonksiyonlarına evrensel hashfonksiyonları
(universalhashfunctions)denir.
Ø Hashfonksiyonları tipik olarak,HashSet gibi,elemanlarının
düzenlemesi ön taraftan gelişi güzel görünen yapıların
gerçekte onları yapısal olarak düzenlenmesinde kullanılır.
www.javaturk.org
43
y
ca
de
m
Hashingve HashCode- I
w
w
w
.s
el
so
f
t.a
Ø java.lang.Object üzerindeki hashCode() metodu native
olarak gerçekleştiren ve nesnenin bellekteki adresini
kullanarak int bir değer üreten bir hashfonksiyonu kullanır.
Ø hashCode() metodunun özelliği,tutarlılık açısından equals()
metodunun true döndürdüğü nesneler için aynı int değeri
hasholarak döndürmesidir.
Ø Yani durumu aynı olan aynı tipten nesneler için aynı hash
codesöz konusudur.
Ø Yani durumu aynı olmayan aynı tipten nesneler için farklı hash
codesöz konusudur.
Ø Aynı tipten olmayan nesneler için tabii olarak farklı hashcode
söz konusudur.
www.javaturk.org
44
y
ca
de
m
Hashingve HashCode- II
w
w
w
.s
el
so
f
t.a
Ø Java’nın bazı sınıflarında hashcodeşöyle hesaplanır:
Ø Integersınıfı int değerini hashcodeolarak çevirir,
Ø Longsınıfı (int)(value^(value>>>32))değerini,
Ø Doublesınıfı (int)(bits^(bits>>>32))değerini,
Ø Charactersınıfı(int)valuedeğerini,
Ø Booleansınıfı,true vefalse için1231ve1237değerlerini,
Ø Stringsınıfıs[0]*31^(n-1) +s[1]*31^(n-2) +...+s[n-1]
değerini döndürür.
www.javaturk.org
45
y
w
w
w
.s
el
so
f
t.a
ca
de
m
HashCodeExample.java
www.javaturk.org
46
y
ca
de
m
t.a
w
w
w
.s
el
so
f
TreeSet
www.javaturk.org
47
ca
de
m
y
SetGerçekleştirmesi:TreeSet-I
w
.s
el
so
f
t.a
Ø TreeSet,elemanlarını sıralı (sorted)tutan bir başka Set
gerçekleştirmesidir.
Ø TreeSet,hemNavigableSet hemdeSortedSet’tir.
Ø TreeSet,bir Red-Blacktreegerçekleştirmesi olan TreeMap
tarafından desteklenir.
Ø Dolayısıyla HashSet herhangi bir dizilim sözü vermezken,
TreeSet dedizilim sıralamadır ve var olan dizilim zaman
içinde değişebilir.
w
w
Ø TreeSet,null referanslara izin verir.
Ø TreeSet,temel fonksiyonlarda (add(),remove(), contains())
O(lgn) bir performans sağlar.
www.javaturk.org
48
y
ca
de
m
FindDuplicates.java
Ø Aynı örneği bu sefer deTreeSet ile çalıştırın.
t.a
Ø TreeSet’ten içindeki elemanları iteratoryoluyla alınmasına
dikkat edin.
so
f
Ø Elemanlar hangi sırayla geliyorlar?
w
w
w
.s
el
Ø Eleman eklenirken dizilim değişiyor mu?
www.javaturk.org
49
ca
de
m
y
SetGerçekleştirmesi:TreeSet-II
w
w
w
.s
el
so
f
t.a
Ø TreeSet,hemNavigableSet hemdeSortedSet’tir.
www.javaturk.org
50
y
ca
de
m
SortedSet Arayüzü
so
f
t.a
Ø java.util.SortedSet,elemanları üzerinde sıralama yapan
Set‘tir.
Ø SortedSet’in elemanları Comparable arayüzünü
gerçekleştirmelidir.
Ø Ya daSortedSet gerçekleştirmesine Comparator geçilmelidir.
comparator()
E
first()
E
w
.s
SortedSet<E>
el
Comparator<? super E>
headSet(E toElement)
last()
spliterator()
SortedSet<E>
subSet(E fromElement, E toElement)
SortedSet<E>
tailSet(E fromElement)
w
w
default Spliterator<E>
www.javaturk.org
51
y
ca
de
m
NavigableSet Arayüzü
Ø java.util.NavigableSet,SortedSet’in yapı içinde arama
amacıyla gezmeye ve aranana enyakın elemanı bulmaya
izin veren arayüzdür.
el
so
f
t.a
ceiling(E e)
descendingIterator()
descendingSet()
floor(E e)
headSet(E toElement)
headSet(E toElement, boolean inclusive)
higher(E e)
iterator()
lower(E e)
pollFirst()
pollLast()
subSet(E fromElement, boolean fromInclusive,
E toElement, boolean toInclusive)
SortedSet<E>
subSet(E fromElement, E toElement)
SortedSet<E>
tailSet(E fromElement)
NavigableSet<E> tailSet(E fromElement, boolean inclusive)
w
w
w
.s
E
Iterator<E>
NavigableSet<E>
E
SortedSet<E>
NavigableSet<E>
E
Iterator<E>
E
E
E
NavigableSet<E>
www.javaturk.org
52
w
w
w
.s
el
so
f
t.a
ca
de
m
y
NavigableAndSortedSetExample.java
www.javaturk.org
53
ca
de
m
y
SetGerçekleştirmesi:TreeSet-II
w
.s
el
so
f
t.a
Ø TreeSet,eklenen elemanları sıralamak için şu iki yöntemi
kullanır:
Ø Eğer elemanlar gerçekleştiriyorlarsa,Comparable arayüzünü
Ø Elemanların Comparable arayüzünün gerçekleştirmediği
durumlarda kendisine geçilen Comparatorarayüzünü
Ø Eğer elemanlar tabi sıralamaya (naturalordering)sahiplerse
buna gerek yoktur.
Ø Buyüzden TreeSet,aşağıdaki kuruculara sahiptir.
TreeSet()
w
TreeSet(Collection<? extends E> c)
w
TreeSet(Comparator<? super E> comparator)
TreeSet(SortedSet<E> s)
www.javaturk.org
54
ca
de
m
y
SetGerçekleştirmesi:TreeSet-III
w
w
w
.s
el
so
f
t.a
Ø TreeSet’e eklenecek elemanların sınıflarında equals(),
hashCode() ve Comparable arayüzünden gelen compareTo()
(ya daComparator arayüzündeki compare())metotlarının
tutarlı bir şekilde sıralamayı gerçekleştirilmeleri gereklidir.
Ø equals(),metodunun truedöndürdüğü nesnelerin hashCode()
metotları daaynı int değeri döndürmeli,
Ø equals(),metodunun true döndürdüğü nesnelerin
gerçekleştirdiği Comparable arayüzün compareTo() (ya da
Comparator arayüzündeki compare())metotları da0
döndürmelidir.
www.javaturk.org
55
y
w
w
w
.s
el
so
f
t.a
SetWithDuplicatedObjects
ca
de
m
TreeSetExample.java
www.javaturk.org
56
y
ca
de
m
HashSet miTreeSet mi?- I
t.a
Ø HashSet ile TreeSet arasındaki temel fark,TreeSet’in
elemanlarını sıralıyor olmasıdır.
Ø Dolayısıyla sıralama isteniyorsa TreeSet kullanılmalıdır.
so
f
Ø Aksi taktirde HashSet kullanılmalıdır,
w
w
w
.s
el
Ø Çünkü HashSet,temel fonksiyonlarda (add(),remove() ve
contains())sabite yakın,O(1), bir performans sağlarken
TreeSet O(lgn) bir performans sağlar.
www.javaturk.org
57
y
ca
de
m
t.a
w
w
w
.s
el
so
f
List ve Gerçekleştirmeleri
www.javaturk.org
58
ca
de
m
y
ListArayüzü - I
w
w
w
.s
el
so
f
t.a
Ø Listarayüzü,dinamik diziyi (array)temsil eder.
Ø Dolayısıyla Listarayüzü,elemanları için ardışıl (sequential)bir
dizilim sağlar.
Ø List,bu amaçla,eleman için “yer”(“position)kavramına
sahiptir.
Ø Yer kavramı sıklıkla “indis”(“index”)ile deifade edilir.
Ø List,tekillikle ilgilenmez,bu yüzden aynı elemandan birden
fazla tutabilir.
Ø Listarayüzü,Collectionarayüzünden devraldığı davranışlara
ardışıllık ile ilgili eklemeler yapar.
www.javaturk.org
59
ca
de
m
y
ListArayüzü - II
Ø Listarayüzü,Collectionarayüzünden devraldığı
davranışlara ardışıllığın getirdiği eklemeler yapar.
Ø Buek metotlarda hep “index”bilgisi mevcuttur.
add(int index, E element)
boolean
addAll(int index, Collection<? extends E> c)
E
get(int index)
int
indexOf(Object o)
so
f
el
w
.s
int
lastIndexOf(Object o)
remove(int index)
w
w
E
E
t.a
void
List<E>
set(int index, E element)
subList(int fromIndex, int toIndex)
www.javaturk.org
60
ca
de
m
y
ListArayüzü - III
el
so
f
t.a
Ø Listarayüzü,Iterable’dır,Collectionarayüzünden
devraldığı iterator() metoduna ListIterator döndüren iki
yeni metot ekler.
Ø Listarayüzünde ayrıca elemanları sıralamaya yarayan
defaultsort()metodu davardır.
Ø Bumetot için elemanlar için bir Comparator
gerçekleştirmesi sağlanmalıdır.
listIterator()
ListIterator<E>
listIterator(int index)
w
.s
ListIterator<E>
w
w
default void
default void
sort(Comparator<? super E> c)
replaceAll(UnaryOperator<E> operator)
www.javaturk.org
61
y
ca
de
m
ListGerçekleştirmeleri
Ø
w
.s
el
so
f
t.a
Ø Listarayüzünün temelde iki gerçekleştirmesi vardır:
Ø ArrayList: Standart ve ençok kullanılan dinamik dizi
gerçekleştirmesidir.
Ø LinkedList:Bağlı liste (linkedlist)gerçekleştirmesidir.
Ø Bunlar dışında,enbaştan bu yana Java’da olan Vector ve
onun daalttipiStack gerçekleştirmeleri vardır.
Ø JavaSE1.2sürümüyle,APIsi List’e uygun halegetirildi.
Ø Vector:Dinamik dizi gerçekleştirmesidir.
synchronized olduğu için pek sık kullanılmaz ArrayList ya da
w
LinkedList tercih edilir.
w
Ø Stack:Yığın gerçekleştirmesidir.Çoğunlukla sadece
APIsi kullanılır.
www.javaturk.org
yığın
62
y
w
w
w
.s
el
so
f
t.a
ca
de
m
ListGerçekleştirmeleri - I
www.javaturk.org
63
y
ca
de
m
t.a
w
w
w
.s
el
so
f
ArrayList ve LinkedList
www.javaturk.org
64
ca
de
m
y
ListGerçekleştirmesi:ArrayList
t.a
Ø ArrayList: Enstandart dinamik dizi gerçekleştirmesidir.
Ø Ençok kullanılan List’tir.
Ø ArrayList ihtiyaca göre büyüyebilir ve küçülebilir.
so
f
Ø ArrayList’in üç tane kurucusu vardır.
Ø ArrayList’in varsayılan kurucusu boş bir listoluşturur.
w
.s
el
Ø ArrayList’in girilen değer kadar odaya sahip olan bir nesne
oluşturan kurucusu davardır.
ArrayList()
w
ArrayList(Collection<? extends E> c)
w
ArrayList(int initialCapacity)
www.javaturk.org
65
ca
de
m
y
ListGerçekleştirmesi:LinkedList
Ø LinkedList,bağlı listedir.
so
f
t.a
Ø LinkedList’in elemanları,sağ ve soltaraftaki komşularını
bilir.
Ø Yani LinkedList’in iki taraflı bağlı listedir (doublelinkedlist).
el
Ø LinkedList’in iki tane kurucusu vardır.
w
.s
Ø LinkedList’in varsayılan kurucusu boş bir listoluşturur.
w
LinkedList()
w
LinkedList(Collection<? extends E> c)
www.javaturk.org
66
w
w
w
.s
el
so
f
t.a
ca
de
m
y
ListExample.java
www.javaturk.org
67
ca
de
m
y
ArrayList miLinkedList mi?- I
w
w
w
.s
el
so
f
t.a
Ø ArrayList ile LinkedList arasındaki temel fark,LinkedList’in
elemanlarının heriki tarafındaki elemanı biliyor olmasıdır.
Ø Buyüzden Java’daki LinkedList çift taraflı listtir.
Ø Buise LinkedList ve ArrayList arasında farklı davranışlar için
farklı performanslara sebep olur.
Ø Erişimde ArrayList sabit,O(1) performansa sahipken
LinkedList elemanı linkler üzerinden giderek bulduğu için
doğrusal (lineer)bir performansa O(n)sahiptir.
Ø Ekleme ve çıkarmada (add() &remove())ArrayList O(n),
LinkedList ise O(1) performansa sahiptir.
Ø Arama heriki yapı için deO(n)’dır.
www.javaturk.org
68
ca
de
m
y
ArrayList miLinkedList mi?- II
so
f
t.a
Ø Dolayısıyla,başa ya daaraya ekleme-çıkarma
yapılmadığında ArrayList tercih edilmelidir.
Ø Çünkü LinkedList’te eleman erişimi,linkler üzerinden gidilerek
yapıldığından,lineerdir,pahalıdır.
w
w
w
.s
el
Ø Ama başa ya daaraya ekleme-çıkarma yapılacaksa
LinkedList tercih edilmelidir.
Ø Çünkü ArrayList’te sona yapılanlar dışındaki ekleme-çıkarma
işlemleri,lineerdir,pahalıdır.
www.javaturk.org
69
y
w
w
w
.s
el
so
f
t.a
ca
de
m
ListPerformance.java
www.javaturk.org
70
y
ca
de
m
t.a
w
w
w
.s
el
so
f
Stack
www.javaturk.org
71
ca
de
m
y
ListGerçekleştirmesi:Stack
t.a
Ø Stack elemanları üst üste konulan bir yığındır ve “songiren
ilkçıkar”(last-in-first-out,LIFO)ilkesiyle çalışır.
Ø Stack’in boş bir yığın oluşturan bir tane kurucusu vardır:
so
f
Stack()
el
Ø Stack bir List’tir ama onu “yığın”yapan farklı metotları da
vardır:
peek()
E
pop()
E
push(E item)
int
search(Object o)
w
w
w
.s
E
www.javaturk.org
72
y
ca
de
m
w
w
w
.s
el
so
f
t.a
StackExample.java
www.javaturk.org
73
y
ca
de
m
t.a
w
w
w
.s
el
so
f
Map ve Gerçekleştirmeleri
www.javaturk.org
74
ca
de
m
y
MapArayüzü - I
Ø Maparayüzü,elemanlarını bellianahtar nesnelerle
eşleştirerek tutan torbaların ana arayüzüdür.
el
so
f
t.a
Ø Dolayısıyla bir Map,anahtar – değer ikilisi tutar.
Ø Buradaki eleman değerdir ve bir anahtar ile eşleştirilerek
torbada tutulur.
Ø Bundan dolayı dagenelde elemanlara anahtarlarıyla ulaşılır.
w
w
w
.s
Ø Map’de iki Collection nesnesi vardır:
Ø Anahtarları tutan Set’tir,dolayısıyla anahtarlar tekildir.
Ø Değerleri tutan ise Collection’dır,dolayısıyla farklı anahtarlarla
eşleştirilmiş aynı nesneler tutulabilir.
www.javaturk.org
75
void
clear()
compute(K key,
BiFunction<? super K,? super V,?
extends V> remappingFunction)
computeIfAbsent(K key,
Function<? super K,? extends V>
ca
de
m
y
default V
default V
mappingFunction)
computeIfPresent(K key,
BiFunction<? super K,? super V,? extends V>
remappingFunction)
t.a
efault V
containsKey(Object key)
boolean
containsValue(Object value)
so
f
boolean
Set<Map.Entry<K,V>>
entrySet()
forEach(BiConsumer<? super K,? super V> action)
V
get(Object key)
Set<K>
w
.s
w
boolean
getOrDefault(Object key, V defaultValue)
isEmpty()
w
default V
el
default void
keySet()
default V
merge(K key, V value,
BiFunction<? super V,? super V,? extends V>
www.javaturk.org
remappingFunction)
76
y
put(K key, V value)
void
putAll(Map<? extends K,? extends V> m)
default V
putIfAbsent(K key, V value)
V
remove(Object key)
t.a
ca
de
m
V
so
f
default boolean remove(Object key, Object value)
default V
replace(K key, V value)
el
default boolean replace(K key, V oldValue, V newValue)
replaceAll(BiFunction<? super K,?
super V,? extends V> function)
int
size()
w
w
.s
default void
values()
w
Collection<V>
www.javaturk.org
77
ca
de
m
y
MapArayüzü - I
w
Ø
JavaSE1.2sürümüyle,APIsi Map’e uygun halegetirildi.
synchronized olduğu için pek sık kullanılmaz,HashMap ya daTreeMap
tercih edilir.
w
Ø
w
.s
el
so
f
t.a
Ø Map arayüzünün entemel iki gerçekleştirmesi vardır:
Ø HashMap,Map’i doğrudan gerçekleştirir ve ensık kullanılandır.
Ø TreeMap ise Map’in altarayüzleri olan SortedMap ve
NavigableMap arayüzlerini degerçekleştirir ve sıralama (sort)
gerektiğinde kullanılır,ve sıralama anahtarlar üzerinden yapılır.
Ø Ayrıca Map’in Hashtable isimli bir başka gerçekleştirmesi de
mevcuttur.
Ø Hashtable,Java’nın enbaşından bu yana olan ilişkilendiren
(associative)torbasıdır.
www.javaturk.org
78
w
w
w
.s
el
so
f
t.a
ca
de
m
y
MapArayüzü - II
www.javaturk.org
79
y
ca
de
m
t.a
w
w
w
.s
el
so
f
HashMap
www.javaturk.org
80
ca
de
m
y
MapGerçekleştirmesi:HashMap - I
Ø HashMap,enstandart ve ensık kullanılan bir Map
gerçekleştirmesidir.
so
f
t.a
Ø HashMap,tamamen Map APIsine sahiptir.
w
.s
el
Ø HashMap,anahtarlar ya dadeğerler için herhangi bir dizilim
sözü vermez,var olan dizilim zamaniçinde değişebilir.
w
w
Ø HashMap,anahtar olarak dadeğer olarak danull
referanslara izin verir.
www.javaturk.org
81
ca
de
m
y
MapGerçekleştirmesi:HashMap - II
w
.s
el
so
f
t.a
Ø HashMap,temel fonksiyonlarda (put(),remove(),
contains(),ve get())sabite yakın,O(1),bir performans
sağlar.
Ø HashMap,4tane kurucu metoda sahiptir.
Ø Varsayılan kurucu başlangıç kapasitesi 16ve doluluk oranı
0,75olan boş bir HashMap oluşturur.
Ø Arzu edilirse HashMap oluşturulurken başlangıç kapasitesi ve
doluluk oranı verilebilir.
HashMap()
w
HashMap(int initialCapacity)
w
HashMap(int initialCapacity, float loadFactor)
HashMap(Map<? extends K,? extends V> m
www.javaturk.org
82
y
w
w
w
.s
el
so
f
t.a
ca
de
m
HashMapExample.java
www.javaturk.org
83
y
ca
de
m
HashMap ve HashCode
w
w
w
.s
el
so
f
t.a
Ø HashMap gibipek çok nesne,hash kodları,nesneleri takip
etmek ve hızlıca ulaşmak için kullanır.
Ø Örneğin HashMap sınıfının put() metodunda geçilen
anahtarın (key)hash değerini tutar.
Ø Anahtarlar tekildir,aynı anahtardan sadece ve sadece bir tane
vardır.
Ø Dolayısıyla get()metoduna bir anahtar geçildiğinde,önce
hash kodunu bulur,sonra değere ulaşır ve O(1) hızında değeri
gerigetirir.
Ø Eğer HashMap’de,put() metoduna geçilen anahtardan zaten
mevcutsa (bu dazaten anahtarın hash kodu ile anlaşılır),bu
durumda eski değer geridöndürülüp yerine yeni değer konur.
www.javaturk.org
84
ca
de
m
y
HashMap’ten Nesne Alma- I
w
.s
el
so
f
t.a
Ø Map’de iki Collection nesnesi vardır,anahtarlar için keyset
Set,değerleri için ise Collection’dır.
Ø Dolayısıyla var olan bir anahtara karşılık gelen nesnenin
bulunması ancak şu şekilde olabilir:
Ø Önce keySet()metodu ile keysetalınır,
Ø Sonra keysetteki anahtarlar üzerinden iteratorile geçilir,
Ø Map’den get()metoduna keygeçilerek ile valuealınır.
w
w
Set keys = map.keySet();
Iterator iterator = keys.iterator();
while (iterator.hasNext()) {
Key key = (Key) iterator.next();
Value value = (Value) map.get(key);
}
www.javaturk.org
85
ca
de
m
y
HashMap’ten Nesne Alma- II
Ø Arzu edilirse doğrudan değer torbası da values()metodu ile
alınabilir.
so
f
t.a
Collection values = map.values();
Iterator iterator = values.iterator();
while (iterator.hasNext()) {
Value value = (Value) iterator.next();
}
w
.s
el
Ø Ya daMap’ten entrySet() metoduyla Map.Entry
nesnelerinden oluşan Set alınabilir.
w
w
Set entrySet = map.entrySet();
Iterator iterator = entrySet.iterator();
while (iterator.hasNext()) {
Map.Entry mapEntry = (Entry) iterator.next();
Object key = mapEntry.getKey();
String value = mapEntry.getValue();
}
www.javaturk.org
86
ca
de
m
y
MapEntry
Ø Map.Entry,Map’teki anahtar-değer çiftini (key-valuepair)
ifade eden bir arayüzdür.
t.a
static <K extends Comparable<? super K>,V> Comparator<Map.Entry<K,V>>
comparingByKey()
so
f
static <K,V> Comparator<Map.Entry<K,V>>
comparingByKey(Comparator<? super K> cmp)
el
static <K,V extends Comparable<? super V>> Comparator<Map.Entry<K,V>>
comparingByValue()
V
w
V
getKey()
w
K
w
.s
static <K,V> Comparator<Map.Entry<K,V>>
comparingByValue(Comparator<? super V> cmp)
boolean equals(Object o)
getValue()
setValue(V value)
www.javaturk.org
87
ca
de
m
y
MapGerçekleştirmesi:TreeMap - I
Ø TreeMap,anahtarları sıralayan bir Map gerçekleştirmesidir.
t.a
Ø TreeMap,hemSortedMap hemdeNavigableMap’tir.
el
so
f
Ø TreeMap,bir Red-Blacktreeolarak gerçekleştirilir.
w
w
w
.s
Ø TreeMap,anahtar olarak null referansa izin vermez ama
değer olarak null referansa izin verir.
www.javaturk.org
88
entrySet()
K
firstKey()
t.a
Set<Map.Entry<K,V>>
SortedMap<K,V>
headMap(K toKey)
Set<K>
keySet()
K
lastKey()
el
subMap(K fromKey, K
SortedMap<K,V>
tailMap(K fromKey)
Collection<V>
values()
w
.s
SortedMap<K,V>
toKey)
w
w
y
Comparator<? super K> comparator()
so
f
Ø java.util.SortedMap
,anahtarları
sıralayan Map‘tir.
Ø Anahtarlar
Comparable
arayüzünü
gerçekleştirmelidir.
Ø Ya daSortedMap
gerçekleştirmesin
e Comparator
geçilmelidir.
ca
de
m
SortedMap Arayüzü
www.javaturk.org
89
y
ca
de
m
NavigableMap Arayüzü
w
w
w
.s
el
so
f
t.a
Ø java.util.NavigableMap,SortedMap’in inyapı içinde
aramaya yapmaya ve aranana enyakın elemanları bulmayı
sağlayan arayüzdür.
www.javaturk.org
90
el
so
f
t.a
ca
de
m
y
ceilingEntry(K key)
ceilingKey(K key)
descendingKeySet()
descendingMap()
firstEntry()
floorEntry(K key)
floorKey(K key)
headMap(K toKey)
headMap(K toKey, boolean inclusive)
higherEntry(K key)
higherKey(K key)
lastEntry()
lowerEntry(K key)
lowerKey(K key)
navigableKeySet()
pollFirstEntry()
pollLastEntry()
subMap(K fromKey, boolean fromInclusive,
K toKey, boolean toInclusive)
subMap(K fromKey, K toKey)
tailMap(K fromKey)
tailMap(K fromKey, boolean inclusive)
w
.s
Map.Entry<K,V>
K
NavigableSet<K>
NavigableMap<K,V>
Map.Entry<K,V>
Map.Entry<K,V>
K
SortedMap<K,V>
NavigableMap<K,V>
Map.Entry<K,V>
K
Map.Entry<K,V>
Map.Entry<K,V>
K
NavigableSet<K>
Map.Entry<K,V>
Map.Entry<K,V>
NavigableMap<K,V>
w
w
SortedMap<K,V>
SortedMap<K,V>
NavigableMap<K,V>
www.javaturk.org
91
w
w
w
.s
el
so
f
t.a
ca
de
m
y
NavigableAndSortedMapExample.java
www.javaturk.org
92
ca
de
m
y
MapGerçekleştirmesi:TreeMap - II
el
so
f
t.a
Ø TreeMap,temel fonksiyonlarda (put(),remove(),contains(),
ve get()),O(lgn),bir performans sağlar.
Ø HashMap,4tane kurucu metoda sahiptir.
Ø Varsayılan kurucu başlangıç kapasitesi 16ve doluluk oranı
0,75olan boş bir HashMap oluşturur.
Ø Arzu edilirse HashMap oluşturulurken başlangıç kapasitesi ve
doluluk oranı verilebilir.
w
.s
HashMap()
w
HashMap(int initialCapacity)
w
HashMap(int initialCapacity, float loadFactor)
HashMap(Map<? extends K,? extends V> m
www.javaturk.org
93
y
w
w
w
.s
el
so
f
t.a
ca
de
m
TreeMapExample.java
www.javaturk.org
94
ca
de
m
y
HashMap mimiTreeMap mi?- I
w
w
w
.s
el
so
f
t.a
Ø ArrayList ile LinkedList arasındaki temel fark,LinkedList’in
elemanlarının heriki tarafındaki elemanı biliyor olmasıdır.
Ø Buyüzden Java’daki LinkedList çift taraflı listtir.
Ø Buise LinkedList ve ArrayList arasında farklı davranışlar için
farklı performanslara sebep olur.
Ø Erişimde ArrayList sabit,O(1) performansa sahipken
LinkedList elemanı linkler üzerinden giderek bulduğu için
doğrusal (lineer)bir performansa O(n)sahiptir.
Ø Ekleme ve çıkarmada (add() &remove())ArrayList O(n),
LinkedList ise O(1) performansa sahiptir.
Ø Arama heriki yapı için deO(n)’dır.
www.javaturk.org
95
y
ca
de
m
t.a
w
w
w
.s
el
so
f
Dönüşümler
www.javaturk.org
96
ca
de
m
y
Torbalar Arası Dönüşümler - I
t.a
Ø Torbalar arasında dönüşümler yapmayı sağlayan metotlar,
torbaların APIlerinde mevcuttur.
Ø Bunların bazıları kurucu metotlardır:
so
f
ArrayList(Collection<? extends E> c)
LinkedList(Collection<? extends E> c)
el
HashSet(Collection<? extends E> c)
w
.s
TreeSet(Collection<? extends E> c)
HashMap(Map<? extends K,? extends V> m)
w
TreeMap(Map<? extends K,? extends V> m)
w
TreeMap(SortedMap<K,? extends V> m)
www.javaturk.org
97
ca
de
m
y
Torbalar Arası Dönüşümler - II
Ø Bütün Collection nesneleri diziye dönüştürülebilir:
toArray()
t.a
Object[]
asList(T... a))
el
List<T>
so
f
Ø Arrays’in aşağıdaki metodu ile bir diziden sabit uzunlukta
bir List elde edilebilir:
w
.s
Ø Map’ten üç tane farklı Collection nesnesi alınabilir:
w
Set<K> keySet()
w
Collection<V>
values()
Set<Map.Entry<K,V>>
entrySet()
www.javaturk.org
98
y
ca
de
m
t.a
w
w
w
.s
el
so
f
Algoritmalar
www.javaturk.org
99
ca
de
m
y
Algoritmalar
w
w
w
.s
el
so
f
t.a
Ø Java’da dizilerle (array)ilgili algoritmalar genel olarak
java.util.Arrays isimli araç (utility)sınıfında ve statik
metotlar olarak bulunur.
Ø Java’da torbalarla ilgili algoritmalar ise genel olarak
java.util.Collections isimli araç (utility)sınıfında ve statik
metotlar olarak bulunur.
Ø Collections sınıfındaki algortimalar çok şekillidir
(polymorphic),
Ø Metotlar algoritmanın tabiatına göre parametre olarak bazen
Collection bazen ise List alır.
Ø Metotlar,geçilen Collections nesnesi null olduğunda
NullPointerException fırlatır.
www.javaturk.org
100
ca
de
m
y
CollectionsSınıfı
w
w
w
.s
el
so
f
t.a
Ø Collections sınıfındaki algortimalar çok şekillidir
(polymorphic).
Ø Metotlar algoritmanın tabiatına göre parametre olarak bazen
Collection bazen deList alır.
Ø Metotlar,geçilen Collections nesnesi null olduğunda
NullPointerException fırlatır.
Ø Algoritmalar arasında,unmodifiedSet(),unmodifiedList() gibi
var olan torbanın değiştilemeyen (unmodifiable)şeklini
üreten toplam 8metot vardır.
Ø Algoritmalar arasında,synchronizedSet(),synchronizedList(),
vs.gibi var olan torbanın synchronized yani thread-safe
şeklini üretenler vardır.
www.javaturk.org
101
y
ca
de
m
Algoritma Örnekleri
w
w
w
.s
el
so
f
t.a
Ø algorithmspaketi.
www.javaturk.org
102
ca
de
m
y
Özet
Ø Bubölümdetorbalarelealındı.
so
f
t.a
Ø Javacollection frameworkündeki farklıamaçlara yönelik
farklıtorbayapılarıincelendi.
w
w
w
.s
el
Ø TorbalarüzerindeçalışanalgoritmalarıiçerenCollections
sınıfıelealındı.
www.selsoft.academy
103
y
ca
de
m
t.a
w
w
w
.s
el
so
f
Ödevler
www.selsoft.academy
104
ca
de
m
y
Ödevler I
t.a
Ø DahaönceoluşturduğunuzüniversiteörneğindekiStudent
hiyerarşisinielealınveöğrencileriönceComparable sonrada
Comparator arayüzü ilesıralanabiliryapın.
w
w
w
.s
el
so
f
Ø Dahaönceoluşturduğunuzkarmaşıksayılarsınıfınınnesnelerini
önceComparable sonradaComparator arayüzü ilesıralanabilir
yapın.
www.javaturk.org
105
ca
de
m
y
Ödevler II
w
w
w
.s
el
so
f
t.a
Ø İsim,soyisimilebirdenfazlaadresvetelefonasahipolankişileri
düşünün.Bukişilerisoyisimlerininbaşharflerinegöre
sınıflandırılmışşekildetutacakbiryapıkurgulayınöyleki
Ø Kişilertekildir,
Ø İsim,soyisim,adresvetelefonüzerindenetkinaramaişlemleri
yapılabilmelidir,
Ø Listelemevesıralamayetkinlikleriolmalıdır.
www.javaturk.org
106
Download