Vector
Vector ile ArrayList benzer yapıya sahip veri tipleridir. İkisi de List Interface’inden türemiştir. Aralarındaki tek fark, vector sınıfında senkronizasyon özelliği bulunmaktadır.
Threat işlemlerinde aynı anda aynı eleman üzerinden işlem yapılma ihtimali olduğundan, vector sınıfında senkronize etme fonksiyonu bulunur. Yani vector’ler senkronizasyon sağlar. Ancak bu durum performans kaybına neden olur.
Eğer threat kullanacaksak vector tercih ederiz. Diğer durumlarda ArrayList kullanırız.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | import java.util.List; import java.util.ListIterator; import java.util.Vector; public class Main { public static void main(String[] args) { Vector<Integer> vc1=new Vector<Integer>(List.of(1,2,3,4,5)); vc1.add(6); System.out.println(vc1); for (int i:vc1) { System.out.print(i+" "); } System.out.println(); ListIterator<Integer> it1=vc1.listIterator(); while(it1.hasNext()){ System.out.print(it1.next()+" "); } System.out.println(); ListIterator<Integer> it2=vc1.listIterator(2); //2. indexten itibaren yazar while(it2.hasNext()){ System.out.print(it2.next()+" "); } System.out.println(); } } |
Fonksiyon | Tanımı |
---|---|
add(Object obj) | Vector’e yeni eleman ekler |
add(int index, Object obj) | Verilen index’e eleman ekler |
addAll(Collection c) | Bir koleksiyondaki tüm elemanları vector’e ekler |
addAll(int index, Collection c) | Belli bir indexten itibaren ekler |
capacity() | Mevcut kapasiteyi gösteririr. |
clear() | Vektörü temizler |
clone() | Vektörün klonunu oluşturur. |
contains(Object o) | Ver,len elemanı vektörün içinde arar ve eğer eleman mevcutsa true döndürür |
containsAll(Collection c) | Bir koleksiondaki tüm elemanlar mevcutsa true döndürür |
copyInto(Object []array) | Girilen array’in içeriğini vektöre kopyalar |
elementAt(int index) | Girilen elemanın bulunduğu ilk indexi döndürür. |
ensureCapacity(int minCapacity) | Kapasiteyi ayarlar. Eğer önceki kapasiteden daha küçük bir değer girilirse son elemanlar silinir |
equals() | İki nesnenin eiştliğini karşılaştırır. |
firstElement() | İlk elemanı döndürür. |
get(int index) | Verilen indexteki elemanı döndürür. |
hashCode() | hash kodu oluşturur. |
indexOf(Object o) | Girilen elemanın vektördeki ilk konumubu döndürür. |
indexOf(Object o, int index) | Belli bir indexten sonraki ilk bulunduğu yeri döndürür. |
insertElementAt(Object o, int index) | Girilen elemanı girilen index’e yerleştirir. |
isEmpty() | Vektörün boş olup olmadığına bakar. |
iterator() | Bir iteratör oluşturur. |
lastElement() | Son elemanı döndürür. |
lastIndexOf(Object o) | Girilen elemanın sondan ilk bulunduğu yerin indexini döndürür. |
lastIndexOf(Object o, int index) | Girilen indexten öncesini arar. |
listIterator() | List iteratörü döndürür.(ilk elemanı tutar) |
listIterator(int index) | Girilen index için list iteratör döndürür. |
remove(int index) | Girilen indexteki elemanı siler |
remove(Object o) | Girilen elemanın ilk göründüğü yeri siler. |
removeAll(Collection c) | Bir koleksiyonda bulunan tüm elemanları vektörden siler. |
removeAllElements() | Removes all components from this vector and sets its size to zero. |
set(int index, Object o) | Girilen indexteki elemanı girilen eleman ile değiştirir. |
setSize(int newSize) | Sets the size of this vector. |
size() | İçerdiği eleman sayısını döndürür. |
subList(int fromIndex, int toIndex) | Girilen iki index arasındaki elemanları başka bir listeye atar. |
toArray() | Vektörü diziye çevirir. |
toString() | Listeyi stringe çevirir. Bu metod sayesinde sout() fonksiyonunda vektörümüzü yazdırabiliriz. |
trimToSize() | Vektörün kapasitesini vektörün boyutuna eşitler. |
Kaynak:https://www.geeksforgeeks.org/stack-class-in-java/
Stack
Stack ve Queue sınıflarını kendi isteğimize göre dizi veya linkedList olarak oluşturabiliriz. Ancak java collcetion framework’de stack sınıfı vector sınıfından türetirmiştir. Bu yüzden vector özelliği taşımaktadır.
Stack’lerde ekleme metodumuz add veya push’tur. st.push(eleman) diyerek eleman ekleyebiliriz.
Çıkarma fonksiyonumlarımızdan biri peek’dir.
st.peek(); dersek, stack’e son eklenen elemanı kullanır. yani sout(st.peek();) dediğimizde son eklenen elemanı yazdırır. Ama bu eleman listeden silinmez.
st.pop(); metodu ise elemanı kullanmakla birlikte listeden de siler. Böylece son giren eleman listeden silinmiş olur.
while döngüsü ve empty komutu ile listeyi boşaltabiliriz.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 | import java.util.Stack; public class Main { public static void main(String[] args) { Stack<Integer> st1=new Stack<Integer>(); st1.push(1); st1.push(2); st1.push(3); st1.push(4); System.out.println(st1.peek()); System.out.println(st1.peek()); System.out.println(st1.peek()); System.out.println(); System.out.println(st1.pop()); System.out.println(st1.pop()); System.out.println(st1.pop()); st1.push(7); System.out.println(st1.pop()); st1.clear(); if(!st1.empty()){ System.out.println("Dolu"); }else System.out.println("Boş"); st1.push(1); st1.push(2); st1.push(3); st1.push(4); if(!st1.empty()){ System.out.println("Dolu"); }else System.out.println("Boş"); while (!st1.empty()){ System.out.println(st1.pop()); } } } |
Stack sınıfı vektörde olmayan şu özellikleri içerir:
Fonksiyon | Tanım |
---|---|
empty() | Liste boşsa true, doluysa false döndürür. |
peek() | Stack’teki son elemanı, silmeden döndürür. |
pop() | Son eklenen elemanı döndürür. ve siler. |
push(Object element) | Eleman ekler |
search(Object element) | Girilen elemanı stack’te arar. |
Queue
Queue veri yapısında İlk giren ilk çıkar. Yani aynı bir sıra gibidir. Zaten Queue kelimesinin türkçe anlamı da kuyruktur. Ekleme fonksiyonu kullandığımızda elemen sona eklenir. Çıkarma fonksiyonunu kullandığımızda ise kuyruğun başındaki eleman kullanılacak ve çıkacaktır.
LinkedList sınıfı hem List hem de Queue interface’inden türemiştir. Bir LinkedList nesnesini List referansı ile turarsak, daha önce gördüğümüz gibi List prensipi ile çalışır.
Ancak eğer LinkedList nesnesini Queue referansı ile tutarsak, bu sefer Queue prensipi ile çalışacaktır.
Queue nesnesinde ekleme metodumuz add’dir. qu.add(eleman); dediğimizde, kuyruğun sonuna elemanı ekler.
offer() metodu da eleman ekler. Farkları ise, add ile eklediğimizde hata oluşursa exception fırlatacak ve programı sonlandıracaktır. offer metodu ise true-false döndürür. Bu sayede hata kontrolü yapabiliriz.
çıkarma metodumuz da stack’te olduğu gibi 2 tanedir.
peek() ile çıkarma yaparsak kuyruğun başındaki eleman döner ama listeden silinmez.
poll() fonksiyonu ise, kuyruğun başındaki elemanı listeden silecektir.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 | import java.util.LinkedList; import java.util.Queue; public class Main { public static void main(String[] args) { Queue<Integer> qu1=new LinkedList<Integer>(); qu1.add(1); qu1.add(2); qu1.add(3); qu1.add(4); System.out.println(qu1.peek()); System.out.println(qu1.peek()); System.out.println(qu1.peek()); System.out.println(); System.out.println(qu1.poll()); System.out.println(qu1.poll()); System.out.println(qu1.poll()); qu1.add(7); System.out.println(qu1.poll()); qu1.clear(); if(!qu1.isEmpty()){ System.out.println("Dolu"); }else System.out.println("Boş"); qu1.add(1); qu1.add(2); qu1.add(3); qu1.add(4); if(!qu1.isEmpty()){ System.out.println("Dolu"); }else System.out.println("Boş"); while (!qu1.isEmpty()){ System.out.println(qu1.poll()); } } } |
Priority Queue
Priority Queue (öncelik kuyruğu) sınıfı Queue interface’inden türemekle beraber, bildiğimiz Queue sınıfındaki gibi ilk giren ilk çıkar mantığı içermez. Her elemanın bir öncelik değeri bulunur. Ve önceliği en yüksek olan eleman kuyruktan ilk çıkar.
Integer veri tipinde öncelik en küçük sayıdadır. String’de ise sözlükte ilk gelen yüksek önceliklidir.
Yeni eklenen elemanın önceliği önceki elemanların arasında ise, kaydırma işlemi yapılarak eleman doğru konuma alınır.
Ekleme-çıkarma metodlarının kullanım şekli Queue ile aynıdır.
For döngüsüyle çalıştırdığımızda sırasız çıkar. while ile sırayla çıkarma işlemi yapmamız gerekir.
Kendi sınıfımızın nesnelerini Priority Queue ile tutmak istersek, önceliğin belirlenebilmesi için sınıfımızda comperable interface’ini implement etmemiz gerekir. Ayrıca yazdırmak için toString metodunu da eklememiz gerekir.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | import java.util.PriorityQueue; import java.util.Queue; public class Main { public static void main(String[] args) { Queue<Integer> qu1=new PriorityQueue<Integer>(); qu1.add(1); qu1.add(7); qu1.add(4); qu1.add(3); qu1.add(2); while (!qu1.isEmpty()){ System.out.println(qu1.poll()); } System.out.println(); qu1.clear(); qu1.add(1); qu1.add(7); qu1.add(4); qu1.add(3); qu1.add(2); for (int i:qu1) { System.out.println(i); } //Hatalı bastı, İstediğimiz gibi değil } } |