PriorityQueue

Kategori: Java , 15 Temmuz 2019 , JanFranco


Bu yazımızda PriorityQueue veri yapısını inceleyeceğiz. PriorityQueue, normal Queue yapısından farklı çalışır. Queue yapısında bir eleman eklediğimizde en sona eklenir ve eleman çıkarmak istediğimizde en sondaki eleman çıkarılır. PriorityQueue yapısında ise eklenecek eleman önceliğe göre yerleşir. Integer veriler ekleyeceğimizi düşünürsek öncelik küçük sayılardadır. String verilerde ise alfabetik olarak küçük Stringlerdedir. PriorityQueue yapısından bir eleman çıkarmak istediğimizde de en küçük elemanlardan yani önceliği yüksek elemanlardan çıkarmaya başlar.

Örneğe geçmeden önce eleman ekleme methodundan bahsedelim. PriorityQueue yapısına iki method ile eleman ekleyebiliriz: add() ve offer(). add() methodu Collection FrameWork'ten gelmekte, offer() methodu ise Queue sınıfından. İkisi de eleman ekler. Farkları ise şudur, add methodu her eleman eklediğinde true değer retun eder ve eleman ekleyemezse bir hata fırlatır (bir sonraki yazıda göreceğiz). offer methodu ise eleman ekleyemezse false değer return eder. Hata mesajı fırlatılmaz. Örneğe geçebiliriz, sadece Integer, String değerlerde değil, sınıf üzerinden de görmek adına Comparable Interface'yi implemente eden bir Player sınıfı açalım:


class Player implements Comparable<Player>{
	
	private String isim;
	private int id;

	public Player(String isim, int id) {
		this.isim = isim;
		this.id = id;
	}

	public String getIsim() {
		return isim;
	}

	public void setIsim(String isim) {
		this.isim = isim;
	}

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	@Override
	public String toString() {
		return "|||| İsim: " + isim + " ID: " + id;
	}

	@Override
	public int compareTo(Player o) {

		if(this.id < o.id){
			return -1;
		}
		else if(this.id > o.id){
			return 1;
		}
		
		return 0;
		
	}
	
}
Önceki yazılarımızda Comparable sınıfını, compareTo methodunu görmüştük. Şimdi Main_class üzerinden que yapısını oluşturalım:

public class Main_class {

	public static void main(String[] args) {
		
		Queue<Integer> que = new PriorityQueue<Integer>();
		
		que.add(2);
		que.offer(2);
		que.offer(4);
		que.offer(7);
		que.offer(3);
		que.offer(5);
		que.offer(1);
		
		while(!que.isEmpty()){
			System.out.println("Eleman çıkarılıyor: " + que.poll());
		}
		
		System.out.println("**********************");
		
		Queue<Player> queue = new PriorityQueue<Player>();
		
		queue.offer(new Player("Jan", 3));
		queue.offer(new Player("Jane", 1));
		queue.offer(new Player("Mr. BBBB", 2));
		queue.offer(new Player("JFJFJFJFJF", 4));
		
		while(!queue.isEmpty()){
			
			System.out.println("Eleman çıkarılıyor: " + queue.poll());
			
		}
		
	}
	
}
poll methodu ile eleman çıkarabiliriz. Konsolu görelim:

Eleman çıkarılıyor: 1
Eleman çıkarılıyor: 2
Eleman çıkarılıyor: 2
Eleman çıkarılıyor: 3
Eleman çıkarılıyor: 4
Eleman çıkarılıyor: 5
Eleman çıkarılıyor: 7
**********************
Eleman çıkarılıyor: |||| İsim: Jane ID: 1
Eleman çıkarılıyor: |||| İsim: Mr. BBBB ID: 2
Eleman çıkarılıyor: |||| İsim: Jan ID: 3
Eleman çıkarılıyor: |||| İsim: JFJFJFJFJF ID: 4


Sonraki Yazı: Using LinkedList as Queue
Yorumlar

Henüz bir yorum bulunmuyor.
Yorum bırakın