26 Aralık 2014 Cuma

Stack - Yığıt - Yığın

          Stack sınıfı nesnelerin LIFO (last-input-first-output) yapısıyla depolanmasını sağlayan bir veri tipidir. Yani nesnelerinizin üst üste depolandığını varsayarsanız ilk nesneniz altta , eklediğiniz yeni nesneler onun üstüne şeklinde devam eden bir yapısı vardır . Örnek vermek gerekirse android telefonlarda açılan uygulamalar yığın yapısıyla depolanır . Açık kalan uygulamalarınız geri tuşuna bastıkça yığının en üstündeki yani kullandığınız bir önceki uygulamaya geçerek devam eder .

           Stack sınıf içinde 5 tane method bulunmaktadır .


  • E peek() : Yığının en üstündeki nesneyi gönderir . 

  • E pop() : Yığının en üstündeki nesneyi gönderir . Peek den farkı burada öğe silinir , peek de silinmez göstermek amaçlı kullanılır .

  • E push(E item) : Gelen nesneyi yığının en üstüne koyar . 

  • int search(Object o) : Verilen nesnenin yığında kaçıncı sırada olduğunu söyler . Saymaya son girenden başlar . Değer yoksa -1 gönderir .

  • boolean empty() : Yığının boş olup olmadığını kontrol eder. 

Aşağıda daha açıklayıcı olması açısından basit bir örnek yapılmıştır .

import java.util.Stack;


public class Driver {

 public static void main(String[] args) {
  
  // stack sınıfından instance alındı
  Stack stack = new Stack<>();
  
  // initialize methodu çağrıldı ve push methoduyla yığın dolduruldu 
  initialize(stack);
  
  // peek = en üstteki nesneyi bul
  stack.peek();
  String peek = stack.peek();
  System.out.print("\n En Tepede "+peek);
  printStack(stack);
  
  
  stack.pop();
  printStack(stack);
  
  // search = nesnenin sırasını bul
  System.out.println(stack.search("D"));
  System.out.println(stack.search("L"));
  
  
 }

 public static void initialize(Stack stack) {
  //push = yığına nesne ekle
  stack.push("A");
  printStack(stack);
  stack.push("B");
  printStack(stack);
  stack.push("C");
  printStack(stack);
  stack.push("D");
  printStack(stack);
  stack.push("E");
  printStack(stack);
 }

 private static void printStack(Stack stack) {
  // isEmpty = yığın boş mu kontrol et
  if(!stack.isEmpty())
   System.out.printf("\n%s ",stack);
  
   
 }
 
 
}
[A] 
[A, B] 
[A, B, C] 
[A, B, C, D] 
[A, B, C, D, E] 
 En Tepede E
[A, B, C, D, E] 
[A, B, C, D] 
1
-1

12 Aralık 2014 Cuma

Final Anahtarı Kelimesi



          Birçok yazılımcının göz ardı ettiği veya gereksiz gördüğü final anahtar kelimesi ; daha dayanıklı , daha performanslı kodlar yazmada çok büyük katkısı olan bir terimdir .Genel tanımıyla methodlarınız veya değerleriniz sabit kalması değiştirilmemesi için kullanılan bir anahtardır diyebiliriz . Kullanımını tamamen yazılımcıya bağlıdır ve 4 farklı yapı için kullanılabilir .


  1. Final Sınıf
  2. Final Method
  3. Final Sınıf Değişkeni
  4. Final Method Değişkeni




1. Final Sınıf

        Eğer yazdığınız sınıfınızı başka bir sınıf tarafından kalıtılmasını istemiyorsanız sınıfınız başına final kelimesini eklemeniz yeterli . Aşağıda final class extend edilmeye çalışılmış ve hata alınmıştır .



2. Final Method

             Eğer yazdığınız methodun başka classlar tarafından kalıtılmasını istemiyorsanız methodun başına final kelimesi ekleyebilirsiniz . Bir nevi burada abstract kelimesinin tersi olarak çalışıyor diyebiliriz . -abstract methodlar alt classlarda kalıtılması zorunludur - . Aşağıda final method override edilmeye çalışılmış ve sonucunda hata alınmıştır.





3. Final Sınıf Değişkeni

          Final sınıf değişkenleri genellikle yazılan sınıf içinde hiç değişmemesi gereken "pisayısı , e sayısı" gibi değişkenler için kullanılır . Sonrasında herhangi bir artırım işlemi veya değiştirilme olmaması garantilenir . Aşağıda final bir değer artırılmaya çalışılmış ve hata alınmıştır .


4. Final Method Değişkeni

          Final method değişkeni ise methoda gönderilen değerin method içinde değiştirilmemesi garantisi verir . Aşağıda final method değişkeni değiştirilmeye çalışılmış ve sonucunda hata alınmıştır.




          Kısaca final anahtar kelimesi herhangi bir kullanım zorunluluğu olmayan fakat kullanıldığı zaman kodun çakılmasını engelleyebilecek hamleler yaptırabilen bir jokerdir .