LinkedLists

Kategori: Java , 10 Temmuz 2019 , JanFranco


Linked List veri yapısını daha önce anlatmıştık. Her bir veri, kendisinden bir önceki verinin next elemanıdır ve eklenen verinin next elemanı Null veriyi gösterir. Yani tüm veriler birbirine sırasıyla bağlıdır. Java'da bağlı listeleri tek bir satırda implemente edebiliriz. Hazır olarak gelmektedir. İlk olarak kütüphaneleri import edelim:


import java.util.LinkedList;
import java.util.ListIterator;
Listeleri bastırmak için ve alfabetik olarak veri eklemek için iki fonksiyon yazacağız. Listeyi bastırmak için fonksiyon:

public static void print_list(LinkedList<String> list) {
		
		ListIterator<String> iterator = list.listIterator();
		
		while(iterator.hasNext()) {
			System.out.println(iterator.next());
		}
		
	}
Burada yeni bir kavram olan ListIterator'ı görüyoruz. ListIterator sınıfından bir iterator obje üretip, listede bu iterator ile gezinebiliriz. Bu fonksiyonda while(iterator.hasNext()) diyerek, verilerin next elemanlarını kontrol ettik ve her bir aşamada, bir next eleman varsa bunu iterator.next() diyerek konsola bastırdık. iterator.next() diyerek hem veriyi return aldık hem de iterator bir adım daha ilerlemiş oldu. Şimdi de alfabetik olarak eleman ekleyeceğimiz fonksiyonu yazalım:

public static void add(LinkedList<String> list, String value) {
		
		ListIterator<String> iterator = list.listIterator();
		
		while(iterator.hasNext()) {
			
			int compare = iterator.next().compareTo(value);
			
			if (compare == 0) {
				// Equality
				return;
			}
			else if (compare < 0) {
				// value > element
			}
			else if (compare > 0) {
				// element > value
				iterator.previous();
				iterator.add(value);
				return;
			}
			
		}
		
		iterator.add(value);
		
	}
Burada yeni bir method görüyoruz. compateTo methodu String sınıfından bir methoddur ve aldığı parametre ile ilgili stringi karşılaştırır. Eğer iki string eşitse 0 değeri return edilir. Eğer parametre olarak verilen değer ilgili stringden alfabetik olarak büyükse negatif sayı return edilir. Tam tersi durumda pozitif sayı return edilir. Bu sayılar -1, 1 olmak zorunda değil çünkü compareTo methodu harfleri karşılaştırarak aradaki farkı return ediyor. Örneğin Ahmet ve Mehmet isimlerini karşılaştırdığımızda aradaki fark 12 olarak return edilecektir. Son olarak LinkedList sınıfından objeler oluşturup kullanalım:

public static void main(String args[]) {
		
		LinkedList<String> placesToGo = new LinkedList<>();
		
		placesToGo.add("Post Office");
		placesToGo.add("Groceries");
		placesToGo.add("SuperMarket");
		placesToGo.add("Metro Station");
		
		print_list(placesToGo);
		System.out.println("");
		
		LinkedList<String> players = new LinkedList<>();
		
		add(players, "Loris Karius");
		add(players, "Domogoj Vida");
		add(players, "Atiba Hutchinson");
		add(players, "Adem Ljajic");

		print_list(players);
	}
Tüm kodlar:

public class Main_class {
	
	public static void print_list(LinkedList<String> list) {
		
		ListIterator<String> iterator = list.listIterator();
		
		while(iterator.hasNext()) {
			System.out.println(iterator.next());
		}
		
	}
	
	public static void add(LinkedList<String> list, String value) {
		
		ListIterator<String> iterator = list.listIterator();
		
		while(iterator.hasNext()) {
			
			int compare = iterator.next().compareTo(value);
			
			if (compare == 0) {
				// Equality
				return;
			}
			else if (compare < 0) {
				// value > element
			}
			else if (compare > 0) {
				// element > value
				iterator.previous();
				iterator.add(value);
				return;
			}
			
		}
		
		iterator.add(value);
		
	}

	public static void main(String args[]) {
		
		LinkedList<String> placesToGo = new LinkedList<>();
		
		placesToGo.add("Post Office");
		placesToGo.add("Groceries");
		placesToGo.add("SuperMarket");
		placesToGo.add("Metro Station");
		
		print_list(placesToGo);
		System.out.println("");
		
		LinkedList<String> players = new LinkedList<>();
		
		add(players, "Loris Karius");
		add(players, "Domogoj Vida");
		add(players, "Atiba Hutchinson");
		add(players, "Adem Ljajic");

		print_list(players);
	}
	
}
Kodun çıktısı:

Post Office
Groceries
SuperMarket
Metro Station

Adem Ljajic
Atiba Hutchinson
Domogoj Vida
Loris Karius


Sonraki Yazı: Interfaces
Yorumlar

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