#lambda etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
#lambda etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

5 Ocak 2020 Pazar

Reverse of Linked List


package ornek01;

public class ReverseLinkedList {
 
 static Node head;
 
 static class Node{
  int data;
  Node next;
  
  Node(int d){
   data = d;
   next = null;
  }
 }
 
 static Node reverse(Node node) {
  
  Node prev = null;
  Node curr = node;
  Node next = null;
  while(curr != null) {
   next = curr.next;
   curr.next = prev;
   prev= curr;
   curr = next;
  }
  return prev;  
  
 }
 
 static void print(Node node) {
  while(node != null) {
   System.out.print(node.data + " ");
   node = node.next;
  }
 }
 public static void main(String[] args) {
  ReverseLinkedList rl = new ReverseLinkedList();
  rl.head = new Node(2);
  rl.head.next = new Node(4);
  rl.head.next.next = new Node(3);
  
  rl.print(head);
  System.out.println("\nReverse:");
  head = rl.reverse(head);
  rl.print(head);
 
 }

}

4 Ocak 2020 Cumartesi

Java Number of Arguments

Java da methodumuza kac tane parametre alacagimizi bilmiyorum. Input olarak istenildigi kadar parametre gonderilebilir ve bizim bunu handle etmemiz gerekebilir. Simdi bu sekilde bir ornek yapacagiz.

Input
1
2
3
4
5
6

Seklinde bir input verilsin. Bizden istenen output ise sayilari toplamak olsun. Ve bu islemi satir satir gostermek.

Output
1+2=3
1+2+3=6
1+2+3+4+5=15
1+2+3+4+5+6=21

Ornekte bizden istenen Add adli bir class icinde add methodumuzu yazmamiz.

class Add{
  void add(int... args) {
   int sum = 0;
   String seperator = "";
   for(int i : args) {
    sum += i;
    System.out.println(seperator + i);
    seperator = "+";
   }
   System.out.println("= " + sum);
  }
 }

Bu kod tam olarak ta istenen islemi yapiyor. Simdi de ornekte builtin tanimlanmis kodlarla son halini asagiya ekleyelim.



9 Kasım 2019 Cumartesi

Multithreading Java

5 defa Hi, 5 defa Hello yazdiralim.



Output: Hi
Hi
Hi
Hi
Hi
Hello
Hello
Hello
Hello
Hello


Gordugumuz gibi 5 kez Hi ve Hello yazdi. Simdi ise her bir yazmadan once biraz beklesin diye bi thread sleep koyalim. 500 verdim yani 500 ms.




Kodumuz bu sefer yukaridaki gibi. 500 ms arayla print ediyor. Burada belirtmek istedigimiz sey kodumuz yine ayni seyi yapiyor ancak Hi yazmasinin bitmesini bekliyor. Bitmeden Hello ya gecmiyor. Bizim istedigimiz ise ikisi ayni anda calisabilsin, birbirini bloklamasin.

O yuzden burada thread kullanacagiz. Her classimiz Thread classini extend ederse classlarimiz Thread haline gelmis olur. Eee Thread classlarinda mutlaka run() olmali ki islemimiz orada calissin. O yuzden show() metodunu run() haline getiriyoruz. ve main threadimiz obj1.start() dememiz lazim. start() cagirdigimiz anda gidip run() methodunu calistirir.



Output  :
Hi
Hello
Hi
Hello
Hello
Hi
Hi
Hello
Hello
Hi

Gordugumuz gibi artik 2 thread birbirini beklemiyor ve ayni anda calisabiliyor. Hatta o kadar ayni ana denk gelmis ki ardarda 2 tane Hello goruyoruz. Ayni ana gelme durumlarinda schedular a gidilir ve schedular hangisi daha kisa ve kolaysa onu secer. Ancak burada 2 methodumuz da ayni islemi yaptigi icin random olarak Hello secilmis.


Interfacelerle Calismak

Javada asagidaki gibi bir kullanim yoktur.

class A extends B, C

Sadece bir tane extend edebiliriz.

O halde soyle bir sey yapmak yerine

class Ornek extends A, Thread { (hatali)

asagidaki gibi yapabiliriz.

class Ornek extends A implements Runnable {

Yani neymis : Thread olusturmanin 2 yontemi varmis.

1. extends Thread diyerek

2. implements Runnable diyerek

Hangisi isimizi gorurse onu kullanmaliyiz.

O halde ornegimizi bir de bu sekilde deneyelim.

Ancak artik classlarimiz Thread tipinde olmadigi icin obj1.start() diyemeyiz. Hata verir. Runnable da o sekilde bir method yok.

O zaman Thread olusturmamiz lazim.

Thread t1 = new Thread(obj1);
t1.start();

iste bu calisir. O halde kodumuzu duzenleyip yeniden deneyelim.



Output:
Hi
Hello
Hello
Hi
Hello
Hi
Hi
Hello
Hello
Hi

Lambda Expressions

Simdi de bu yazmis oldugumuz daha kisa ve daha efektif hale getirmeye calisalim.

Hi ve Hello adinda iki class yazdik ve ikisinin de yaptigi sey sadece Runnable i implement etmek. O halde bunlara gerek yok.Thread icinde de ayni islemi yapabiliriz.



Simdi de bunu lambda haline getirelim. Yani method isimlerine ve parantezlere gerek yok.

O durumda da soyle olur:


Son durumda ise kodumuz asagidaki gibi olur ve ayni islevi daha efektif olarak yapar.


Output:

Hi
Hello
Hello
Hi
Hi
Hello
Hi
Hello
Hi
Hello