5 - ArrayList & JAVA Koleksiyon(Collection) API

Download Report

Transcript 5 - ArrayList & JAVA Koleksiyon(Collection) API

Ders İçeriği
• Liste
– Tanım ve Operasyonları
• Soyut veri yapısı (ADT)
– Tanım & fonksiyonlar
• Liste Gerçekleştirimi: ArrayList
• JAVA Koleksiyon API (Collections API)
– Tekrarlayıcı (Iterator)
• Uygulama – Java ile ArrayList Gerçekleştirimi
1
• Liste ?
Liste(List) - Tanım
– A1, A2, …, An şeklinde eleman dizisi.
– Elemanlar rastgele olabilir, fakat aynı tüde olmalı
( hepsi tamsayı (int), hepsi ondalık sayı (double) vb)
• Örnek 5 elemanlı liste (indis 0-4 arasında)
– 2, 6, 1, 2, 3
•
•
•
•
•
2’nin indisi
6’nın indisi
1’in indisi
2’nin indisi
3’ün indisi
0
1
2
3
4
2
Liste Operasyonları: ekleme
• Listenin sonuna yeni eleman ekleme
– 4, 6, 1, 4, 5  ekle(8) 4, 6, 1, 4, 5, 8
• Elemanı listenin herhangi bir pozisyonuna
ekleme
– 4, 6, 1, 4, 5  ekle(2, 9)  4, 6, 9, 1, 4, 5
3
Liste Operasyonları: silme
• Listede olan bir elemanı silme
–
–
–
–
4, 6, 1, 4, 5  sil(2) 4, 6, 4, 5
4, 6, 1, 4, 5  sil(0) 6, 1, 4, 5
4, 6, 1, 4, 5  sil(1) 4, 1, 4, 5
4, 6, 1, 4, 5  sil(4) 4, 6, 1, 4
4
Liste Operasyonları:
indis & sonIndis
• indis yordamı listedeki ilk eşleşen elemanın
indisini döndürür.
– 4, 6, 1, 4, 5  indis(6) 1
– 4, 6, 1, 4, 5  indis(5) 4
– 4, 6, 1, 4, 5  indis(4) 0
• sonIndis yordamı ise listedeki eşleşen son
elemanın indisini döndürür
– 4, 6, 1, 4, 5  sonIndis(1)  2
– 4, 6, 1, 4, 5  sonIndis(4)  3
5
Liste Operasyonları: get & set
• get yordamı parametre olarak verilen indisteki
değeri döndürür.
– 4, 6, 1, 4, 5  get(1) 6
– 4, 6, 1, 4, 5  get(3) 4
– 4, 6, 1, 4, 5  get(0) 4
• set yordamı verilen indisteki değeri verilen
değere atar.
– 4, 6, 1, 4, 5  set(1, 9)  4, 9, 1, 4, 5
– 4, 6, 1, 4, 5  set(3, 5)  4, 9, 1, 5, 5
– 4, 6, 1, 4, 5  set(4, 7)  4, 9, 1, 4, 7
6
Soyut Veri Tipleri
(Abstract Data Type - ADT)
• Şimdiye kadar Soyut veri tiplerinin (ADT)
operasyonlarına baktık.
– Operasyonlarda ADT’nin nasıl davrandığı gösterildi,
fakat nasıl gerçekleştirildiği konusuna değinilmedi.
– Çoğu zaman ADT’yi gerçekleştirmek için birden fazla
yol vardır.
7
Soyut Veri Tipleri (ADT) - devam
• Soyut veri tipleri operasyonları olan veri
yapısıdır.
özellik (ADT durum)
…
…
İşlemler (ADT Yordamları)
islem1(…)
islem2(…)
islem3(…)
…
…
…
8
Liste
class Liste {
…
void
void
void
int
int
bool
bool
int
int
int
int
add(int e);
add(int pos, int e);
remove(int pos);
indexOf(int e);
lastIndexOf(int e);
clear();
isEmpty();
first();
last();
get(int pos);
size();
//
//
//
//
//
//
//
//
//
//
//
sona ekle
belirli pozisyona ekle
sil
baştan arama
sondan arama
Tüm elemanları sil
liste boş mu?
ilk eleman
son eleman
belirli pozisyondaki değer
listedeki eleman sayısı
}
9
Liste Kullanımı
Public static void main(String[] args){
List list = new List(); // boş bir liste oluştur
list.add(10);
list.add(5);
list.add(1, 7);
list.add(2, 9);
//
//
//
//
10
10, 5
10, 7, 5
10, 7, 9, 5
list.indexOf(7);
list.get(3);
list.remove(1);
list.size();
list.isEmpty();
//
//
//
//
//
1 döndürür
5 döndürür
10, 9, 5
3 döndürür
false döndürür
list.remove(0);
list.clear();
// 9, 5
// boş liste
delete list;
}/* bitti-main */
// Liste nesnesini sil
10
Liste: Gerçekleştirim
• İki tür gerçekleştirim vardır:
– Dizi tabanlı
– Bağlantılı liste
• ADT operasyonlarının farklı
gerçekleştirimlerinin çalışma zamanını
karşılaştıralım.
11
Liste:Dizi tabanlı gerçekleştirim
• Temel fikir:
–
–
–
–
Büyük bir dizi için yer açın (MAX)
N ile ilk boş yeri tutun
N = 0 ise liste boş
Silme veya ekleme işleminde elemanları kaydırın.
0
1
2
3
………
N-1
A_1
A_2
A_3
A_4
………
A_N-1
MAX
ArrayList – Java
ArrayList ADT
class ArrayList {
private int kapasite;
private int elemSayisi;
private int[] items;
// Yapıcı yordam:
// Boş liste oluştur
public ArrayList(){
int[] items = new int[4];
kapasite = 4;
elemSayisi = 0;
} // bitti-ArrayList
ArrayList (); //Yapıcı y.
void add(int pos, int e);
void remove(int pos);
int indexOf(int e);
bool isEmpty();
int first();
int last();
int get(int pos);
int size();
}
13
Liste Operasyonları : add
• add(pizisyon P, ElemanTürü E)
– Örnek: add(2, X): X’i 2 nolu pozisyona ekle
• Temel Fikir: Yeni elemanı eklemek için
elemanları 1 birim sağa kaydır.
0
1
2
3
………
N-1
A_1
A_2
A_3
A_4
………
A_N
MAX
• X eklendikten sonraki görüntü.
• Çalışma zamanı: O(N)
0
1
2
3
………
A_1
A_2
X
A_3
………
N-1
N
A_N-1 A_N
MAX
Add – Dolu Dizi
• Eğer dizi doluysa ne yapılabilir?
–
Hata döndürülebilir.
•
–
Tercih edilmez.
Genel olarak aşağıdakiler yapılır:
(1) Daha büyük bir dizi oluştur (genellikle kapasite 2 kat
arttırılır)
(2) Eski dizideki tüm elemanları yeni diziye kopyala
(3) Eski diziyi sil
(4) Yeni diziyi kullanmaya başla
–
Bu dinamik dizi gerçekleştiriminde ayrıca kapasiteyi
de kontrol altında tutulması gerekmektedir.
Liste Operasyonları: silme
• remove(pozisyon P)
– Örnek: remove(1): 1 nolu pozisyondaki elamanı sil
• Temel fikir: Elemanı sil ve elemanları sola bir
adım kaydır.
0
1
2
3
………
N-1
A_1
A_2
A_3
A_4
………
A_N
MAX
• Listenin son durumu. Çalışma zamanı: O(N)
0
1
2
3
………
N-2
A_1
A_3
A_4
A_5
………
A_N
N-1
MAX
Liste Operasyonları: indexOf
• indexOf(elemanTürü E)
– Örnek: indexOf(X): Listede X’i arama
0
1
2
3
………
N-1
A_1
A_2
A_3
A_4
………
A_N
• Doğrusal arama yapılmalı
– Çalışma zamanı: O(N)
MAX
Liste Operasyonları: isEmpty
• isEmpty()
– Eğer liste boşsa true döndür
– Eğer liste doluysa false döndür
0
1
2
3
………
N-1
A_1
A_2
A_3
A_4
………
A_N
• Eğer N == 0 ise true döndür
– Çalışma zamanı: O(1)
MAX_SIZE
Lists Operations: first, last, get
• first(): Return A[0]
• last(): Return A[N-1]
• get(pozisyon K): Return A[K]
0
1
2
3
………
N-1
A_1
A_2
A_3
A_4
………
A_N
• first – Running time: O(1)
• last – Running time: O(1)
• get – Running time: O(1)
MAX_SIZE
JAVA Koleksiyon (Collection) API
• Veri yapıları: veri üzerinde izin verilen
verilerin ve operasyonların gösterilmesidir.
• Genel veri yapıları verileri toplar ve bu
veriler üzerinde ekleme, silme, erişme gibi
işlemlere izin verir.
• JAVA Collections API arayüzü genel veri
yapılarını ve bu veri yapıları üzerinde genel
işlemleri destekler.
20
JAVA Koleksiyon(Collections) API
SortedSet
TreeSet
Set
AbstractSet
Collection
HashSet
LinkedHashSet
Vector
Stack
AbstractCollection
AbstractList
List
ArrayList
AbstractSequentialList
LinkedList
Deque
Queue
Interfaces
AbstractQueue
Abstract Classes
PriorityQueue
Concrete Classes
21
JAVA Koleksiyon(Collections) API
22
Tekrarlayıcı (Iterator)
• Ö.ğ. ArrayList elemanları ekrana yazdırma.
– liste nesnesinin ArrayList olduğu düşünülürse
for(int i=0 ; i < liste.size() ; i++)
System.out.println( liste.get(i) );
• Burada i iterasyon nesnemiz.
– Çünkü, tekrarı kontrol eden nesnemiz.
23
Tekrarlayıcı (Iterator)
• Dizideki elemanları ekrana yazdırma.
Iterator i = liste.iterator();
while( i.hasNext() )
System.out.println( i.next() );
24
Uygulama
• ArrayList sınıfı gerçekleştirimi
• Aşağıdaki yordamları yazınız.
– 5 kapasiteli dizi oluşturan yapıcı yordam
–
–
–
–
–
–
–
–
–
–
–
void
void
void
int
int
bool
bool
int
int
int
int
add(int e);
add(int pos, int e); //isteğe bağlı
remove(int pos);
//isteğe bağlı
indexOf(int e);
lastIndexOf(int e);
clear();
//isteğe bağlı
isEmpty();
first();
last();
get(int pos);
size();
25