Ekim 18, 2021
11 11 11 ÖÖ
TCP nedir ? Aktarım Katmanı 2
Aktarım Katmanı Tcp Nedir
Yönlendirme Nedir 2 ?
Yönlendirme Nedir ?
Ağ Katmanı Nedir 2 ?
Ağ Katmanı Nedir ?
Veri Bağı Katmanı Nedir 2 ?
Android Studio Nasıl Kurulur ?
Veri Bağı Katmanı Nedir ?
Fiziksel Katman Nedir ?
Son Yazılar
TCP nedir ? Aktarım Katmanı 2 Aktarım Katmanı Tcp Nedir Yönlendirme Nedir 2 ? Yönlendirme Nedir ? Ağ Katmanı Nedir 2 ? Ağ Katmanı Nedir ? Veri Bağı Katmanı Nedir 2 ? Android Studio Nasıl Kurulur ? Veri Bağı Katmanı Nedir ? Fiziksel Katman Nedir ?
java

Java Koleksiyonlar (Collections)

Paylaşım , Takip İçin

Koleksiyonlara Giriş

  • Java’da yazılım geliştirirken bazen tek bir değişken içerine farklı verilere erişmek isteyebiliriz.
  • Bu gibi durumlarda Java Collections sınıfını kullanmak işinizi kolaylaştıracaktır.
  • Kollection sınıfı içerisinde:
  • ArrayList
  • LinkedList
  • Hashset
  • Queue vb. gibi yapıları içermektedir.

Koleksiyonların Avantajları

  • Birden fazla veriyi tek bir değişken içinde saklamanıza olanak sağlar.
  • Veri çekme, veri işleme, sıramala, veri içerisinde arama yapmak gibi işlemleri kolaylaştırırlar.
  • Dinamik bir yapıda olduklarından belli bir boyutları yoktur. Çalışma zamanında boyutları değişebilir.
  • Koleksiyonların kullanımı bazen kafa karıştırıcı olabilir.

Ortak Koleksiyon Metotları

  • Koleksiyon sınıfları birtakım ortak metotlar kullanırlar. Bu metotlar bazen sınıftan sınıfa farklılık gösterebilir.
  • add:Koleksiyon nesnesine referans verilen elemanı ekler.
  • remove: Koleksiyon nesnesinden referans verilen elamanı siler.
  • isEmpty: koleksiyon nesnesinin boş olup olmadığına bakar.
  • contains: koleksiyon nesnesi içerisinde referans olarka belirtilen elemanı arar.
  • iterator: koleksiyon nesnesini iterasyon nesnesine rferans olarak göndermeyi sağllar.
  • size: koleksiyon nesnesinin boyutunu döndürür.

Iterator Sınıfı

  • Bu sınıf koleksiyon nesnelerimizi yinelememizi sağlar.
  • Iterator nesnesi ile Koleksiyon nesnesi altında bulunan elemanlar arasında güvenli şekilde dolaşabilir veya elemanlar üzerinde işlem yapabilirsiniz.
  • hasNext: bir sonraki elemanın olup olmadığına bakar.
  • next: bir sonraki elemanı getirir.
  • remove: iterater nesnesinin kolleksiynoda gösterdiği elemanı siler.

Örnek

import java.util.HashSet;

import java.util.Iterator;

public class IteratorExp {

  public static void main(String[] args) {

    // TODO Auto-generated method stub

    HashSet<String> c=new HashSet<String>();

    c.add("a");c.add("abc");c.add("abcd sdff");

    Iterator<String> i=c.iterator();

    while (i.hasNext()) {

      System.out.println("New item="+ i.next());

    }

  }

}

Kümeler (HashSet)

  • HashSet koleksiyonu Set arayüzünden türetilmiştir.
  • Tam olarak küme yapısına benzer.
  • Eklenen veri türleri aynı olmak zorunda değildir.
  • Elemanlarının sıralı olması şartı yoktur.
  • Aynı isme sahip birden fazla eleman ekleyemezsiniz.
  • add: metodu kullanılarak eleman eklenebilir.
  • remove: metodu ile adı verilen eleman kümeden silinir.
  • add metodu ile eklenilen eleman kümede mevcutsa metot false döndürür ve o eleman kümeye eklenmez.

Örnek

import java.util.HashSet;

import java.util.Iterator;

class kumeler {

  public static void main(String[] args) {

    HashSet hSet=new HashSet();

    String[] s= {"Ali","Ahmet","Mehmet","Fatma","Ali"};

    boolean chk;

    for (String temp:s) {

      chk=hSet.add(temp);

      if(!chk) {

        System.out.println("Kopya eleman bulundu!");

      }

    }

    hSet.remove("Fatma"); // Eleman Silmek

    Iterator i=hSet.iterator();

    while (i.hasNext()) {

      System.out.println("Eleman="+i.next());

    }

  }

}

LinkedHashSet Yapısı

  • HashSet içeresinde verilere erişim sırası belirsizdir.
  • LinkedHashSet ise öğeler birbirine tek yönlü bağlıdır.
  • Yeni bir eleman eklendiğinde önceki ve sonraki elemanlar yeniden düzenlenir.

Örnek

import java.util.Iterator;

import java.util.LinkedHashSet;

public class LinkedSet {

  public static void main(String[] args) {

    LinkedHashSet lHSet=new LinkedHashSet();

    lHSet.add("Ahmet");

    lHSet.add("Mehmet");

    lHSet.add("Fatma");

    lHSet.add("Hasan");

    lHSet.remove("Fatma");//Eleman silmek

    Iterator i=lHSet.iterator();

    while (i.hasNext()) {

       System.out.println("Eleman="+i.next());

    }

  }

}



-------------------------------

Eleman=Ahmet

Eleman=Mehmet

Eleman=Hasan

Sıralı Kümeler TreeSet

  • TreeSet öğesi SortedSet arayüzünün bir alt sınıfıdır.
  • Bu koleksiyon tipinde tip kontrolü yapılır.
  • Yani küme içerisindeki elemanlar farklı veri tiplerinde olmamalıdır aksi halde derleme zamanı hatası (runtime error) alırsınız.
  • first: Koleksiyon Öğesinin en küçük elemanını verir.
  • last: en büyük elemanını verir.
  • headSet: metot içinde verilen öğeden küçük olanları verir.
  • tailSet: metot içinde verilen öge ve büyük olanları verir.
  • descendingSet: Küme sıralamasını tersine çevirir.

Örnek

import java.util.*;

public class SortedSet {

  public static void main(String[] args) {

    TreeSet<String> ts=new TreeSet<String>();

    ts.add("Istanbul");

    ts.add("Adana");

    ts.add("Ankara");

    ts.add("Izmir");

    ts.add("Sivas");

    //ts.add(1);

    Iterator i=ts.iterator();

    while (i.hasNext()) {

       System.out.println("Eleman="+i.next());

    }

    System.out.println(ts.first());

    System.out.println(ts.last());

  }

}

Liste Yapıları

  • List koleksiyon arayüzü verileri bir dizi(array) halinde depolar.
  • Dizilerde olduğu gibi bu yapıda da indis değeri vardır.
  • Dizilerden en büyük farkı boyutlarının önceden belirlenmiş olmamasıdır.
  • Liste yapılarında liste elemanları içeresinde güvenli bir şekilde gezinebilmek için ListIterator() metodu kullanılmaktadır.
  • hasNext, hasPrevious, next, previous, get, set, nextIndex, previousIndex gibi metotları vardır.

ArrayList Yapısı

  • ArrayList sınıfı elemanları bir dizi biçiminde saklar ve boyutu eleman eklendikçe otomatik olarak büyür.
  • ArrayList sınıfının elemanlarına indis(index) ile erişim mümkündür.
  • Veri sayısının belli olmadığı veya dizin boyutunun önceden bilinmediği durumlarda kullanışlıdır.
  • ArrayList dizilerden farklı olarak nesneleri depolayabilir.

Örnek

import java.util.*;

public class Liste {

  public static void main(String[] args) {

    ArrayList<Integer> liste=new ArrayList<Integer>();

    liste.add(1);

    liste.add(2);

    liste.add(3);

    ListIterator i=liste.listIterator();

    while(i.hasNext()) {

      System.out.print("elemanın indisi= "+i.nextIndex());

      System.out.println(" elemanın değeri= "+i.next());

    }

    System.out.println(liste);

    liste.remove(0);//verilen indisteki değeri siler

    System.out.println(liste);

    liste.add(0,10);//0 nolu indise yeni değer ekler

    System.out.println(liste);

    System.out.println(liste.get(1));//1 nolu indisteki eleman

    liste.set(2, 21);//2 nolu indisteki değeri değiştirir

    System.out.println(liste);

  }

}

LinkedList (Bağlı Liste)

  • Bağlı Liste (Linked List) yapısında adından da anlaşılacağı gibi elemanlar eklenirken aralarına bir bağ konulur.
  • Bu bağ hem tek yönlü hem de çift yönlü olabilir.
  • Bağlı Liste yapısı istenildiğinde özelleştirilerek kuyruk(queue) ve yığıt(stack) elde edilmesine olanak sağlar.
  • Liste(List) yapısı için kulanılan birçok metot LinkedList için de geçerlidir.

Örnek

import java.util.*;

public class BagliListe {

  public static void main(String[] args) {

    LinkedList ls=new LinkedList();

    ls.add(1); ls.add(2);

    ls.add(3); ls.add(24);

    System.out.println("Tüm Liste: "+ls);

    ls.addFirst(12);

    System.out.println(ls.getFirst());

    ListIterator i=ls.listIterator();

    while (i.hasNext()) {

      System.out.println("Eleman="+i.next());

    }

  }

}

Kuyruk Sınıfı

import java.util.LinkedList;

public class Kuyruk {

  private LinkedList list=new LinkedList();

  public void ekle(Object item) {

    list.addLast(item);

  }

  public Object cikar() {

   return list.removeFirst();

  }

  public Object ilkItem() {

    return list.getFirst();

  }

  public boolean isEmpty() {

    return list.isEmpty();

  }

}

Yığıt Sınıfı

import java.util.LinkedList;

public class Yigit {

  private LinkedList list=new LinkedList();

  public void ekle(Object item) {

    list.addFirst(item);

  }

  public Object cikar() {

    return list.removeFirst();

  }

  public Object ilkitem() {

    return list.getFirst();

  }

  public boolean isEmpty() {

    return list.isEmpty();

  }

}

Ana Sınıf (KuyrukYığıt)

public class KuyrukYigit {

  public static void main(String[] args) {

    Kuyruk queue=new Kuyruk();

    Yigit stack=new Yigit();

    for (int i=0;i<=3;i++) {

      queue.ekle(i);

      stack.ekle(i);

    }

    while(!queue.isEmpty()) {

      System.out.print(queue.cikar()+” “);

    }

    System.out.println();

    while(!stack.isEmpty()) {

      System.out.print(stack.cikar()+” “);

    }

  }

}

Queue ve Stack Sınıfları

  • Kuyruk sınıfı Java’da LinkedList Sınıfından türetilerek kullanılabilir.
  • Kuyruk İlk Giren İlk Çıkar (First in First Out (FIFO)) mantığıyla çalışır.
  • Liste ve Kuyruk yapıları indis değerleri ile işlem yapamazlar.
  • Yani indis değeriyle bir elemana erişmeniz mümkün değildir.
  • Yığıt ise Son Giren İlk Çıkar(Last in First Out(LIFO)) mantığıyla çalışır.
  • Yığıt içerisinde eleman eklemek ve çıkarmak için özel metotlar kullanılır.
  • push() : Yığıta yeni bir eleman ekler.
  • pop() : Yığıttan bir eleman çıkartır.

Örnek

import java.util.LinkedList;

import java.util.Queue;

import java.util.Stack;

public class Kuyruk2 {

  public static void main(String[] args) {

    Queue kuyruk=new LinkedList(); //Kuyruk sınıfı

    Stack yigit=new Stack(); //Yığıt sınıfı

    kuyruk.add(1); yigit.push(1);

    kuyruk.add(2); yigit.push(2);

    kuyruk.add(3); yigit.push(3);

    kuyruk.offer(78);Object a=yigit.peek();

    System.out.println(a.toString());

    while(!kuyruk.isEmpty()) {

      System.out.println(kuyruk.remove());

    }

    while(!yigit.isEmpty()) {

      System.out.println(yigit.pop());

    }

  }

}

Map Arayüzü ve HashMap Sınıfı

  • Map Collection arayüzünün bir parçası değildir.
  • Bu Arayüz elemanlarını anahtar değerine eşleştirerek saklar.
  • Anahtar değerler arasında kopya değerler bulunmaz.
  • Bazı özel metotlara sahiptir:
  • containsValue(Object key): Map içinde referans olarak verilen değer varsa true yoksa false döner.
  • entrySet(): Map içindeki elemanları Set koleksiyon öğesi olarak verir.
  • get(Object key): Map içerisinden verilen anahtar değere ait öğeyi getirir.
  • put(Object key, Object Value): Map içerisine anahtar değer ile verilen elemanı kaydeder.
  • Values(): Map içindeki değerleri koleksiyon olarak verir.

HasMap Sınıfı

  • HashMap sınıfı Map arayüzünün bir örneğidir.
  • Anahtar değer veya veriler sıralı olmak zorunda değildir.
  • HasMap sınıfında performansı belirleyen bazı faktörler vardır.
  • Başlangıç sığası: Initial Capacity
  • Yükleme Katsayısı: Load Factor
  • HasMap içerisindeki alan dolduğunda otomatik olarak yeniden bir sığa belirlenir.

Örnek

import java.util.HashMap;

import java.util.Set;

public class HashTablosu {

public static void main(String[] args) {

    HashMap<Integer, String> hash=new HashMap<Integer, String>(10, 0.75f);

    hash.put(1, "Bir");

    hash.put(2, "İki");

    hash.put(3, "Üç");

    hash.put(4, "Dört");

    Set veri=hash.entrySet();

    Set key=hash.keySet();

    System.out.println(hash);

    System.out.println(hash.containsKey(1));

    System.out.println(veri);

    System.out.println(key);

  }

}



-----------------------------------

{1=Bir, 2=İki, 3=Üç, 4=Dört}

true

[1=Bir, 2=İki, 3=Üç, 4=Dört]

[1, 2, 3, 4]

Paylaşım , Takip İçin
0 0 votes
Article Rating

Bir Cevap Yazın

0 Yorum
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x
HAYALİNDEKİ YAZILIM
%d blogcu bunu beğendi: