İçindekilerGirişİndex
YukarıİlkÖncekiSonrakiSon
Geriİleri
Yazdır

Vector ve Hashtable

Java'da bir den fazla değeri tutmaya yarayan temel veri yapısı array (dizi)dir. Diziler 'sabit miktarda değerleri' tutarlar ve bir 'index' (indis) aracağılığıyla elemanlara erişim sağlarlar. Ancak bazı durumlarda elemanların sayısı baştan belli değildir. Sonradan belli olur veya baştan belirlenen değer sonradana değişir. Bazı durumlarda da erişim için index kullanılamaz. Bir arada tutulması istenen elemanlar için bir index gibi bir sayı tutmak anlamsızdır. Her eleman sayı olmayan bir 'key' (anahtar)'a bağlı olabilir. Veritabanları için ID alanları, web sitelerinde kullanıcı isimleri, kimlik veya vergi numaraları bunlara örnektir. Bu tipte veriler için dizi kullanmak anlamsızdır, çünkü elamanlar sıralı değildir. '3.' veya '5.' elemanı diyebileceğimiz bir eleman yoktur. Elemanları sayısının da sırasının da anlamı yoktur. Örneğin, 3. eleman silinince yani aradan bir eleman çıkınca 5. eleman 4. eleman haline gelir. Bu durumda daha önce 5'ler erişilebilen elemanı 4 numaraya düşebilir. Bu durumlarda dizi kullanılamaz.

Java'da birden fazla nesneyi tutmak için Collection'lar kullanılır. Collectionlar Java 2 Standart Edition'a 1.2'de dahil olmuştur. Bu versiyondan önce Collection gibi kullanılabilecek sadece Vector ve Hashtable gibi bir kaç class bulunmaktaydı. Collection'lar Java'ya dahil olunca bu class'lar da Collection'ların arasında katılmıştır. Collection'ların daha yeni ve daha kullanışlı olmalarında rağmen Java'da bir çok yerde Vector ve Hashtable kullanılmaya devam edilmektedir. Bula 'eskimiş' değildirler. Bu iki class'ın öğrenilmesi Collection'ları öğrenmek için iyi bir başlama noktası olabilir.

Vector

Vector, temelde bir array'le aynı işlevi görür. Elemanlarına 'index'le erişilebilir. Ancak index olmadan erişmek de mümkündür. 'Araya şu elanı sok' veya 'Sonuna şu elemanı ekle' denebilir. Eleman sayısı başta belirlenmek zorunda değilidir. Eleman eklendikçe Vector büyür.

Vector tanımlamak, Vector class'ına ait bir nesne tanımlamaktır :

    Vector v=new Vector();

Eleman eklemek te bu nesnenin bir method'unu çağırmak şeklinde olur :

	v.addElement("x");

aynı şekilde eklenmiş bir elemanını index'iyle almak için bir method çağrılır

	String v=(String) v.elementAt(3);

Cast

Burada 'cast' yapmak zorundayız. Vector ve Hashtable'ın, genel olarak bütün Collection'ların tip bilgisini kaybetmesi gibi bir durum söz konusudur. Collection'lar genel yapılar olduğu için içlerinde barındırdıkları nesnenin tipini (class'ını) bilmezler. Onlar sadece 'Object' tutarlar. Örneğin 'elementAt' methodu

	public Object elementAt(int index);

şeklinde tanımlanmıştır. 'addElement' metodu da

	public void addElement(Object o);

şeklinde tanımlanmış. 'String' class'ı bir obje olduğundan, yani her String aynı zamanda bir Object olduğundan eleman eklerken 'cast' sorunu çıkmaz. Ancak alırken String yerine object aldığımızdan ve her Object bir String olmayabileceğinden cast işlemi yapılmalıdır.

Bir vectorden eleman silmek için 'removeElement' methodu bulunmaktadır. Eleman sayısını almak için size() diye bir method vardır. Bütün elemanlara erişim için bir döngü kurulabilir. Bir vektörün bütün elemanlarını ekrana basmak için

    for(int i=0;i<v.size();i++){
    	String item=(String) v.elementAt(i);
    	System.out.println(item);
    }

şeklinde bir kod yazılabilir.

Enumeration

Bir vector'deki bütün elemanlara erişmenin farklı yöntemi daha vardır : Enumeration kullanmak. Örneğin :

	Enumeration e=v.elements();
  	while(e.hasMoreElements()){
		String item=(String) e.nextElement();
    	System.out.println(item);
  	}

şeklindeki kod, bütün elemanlara erişim yapar. Enumeration bütün elemanlara erişmek için kullanılan bir interface'dir. hasMoreElements() methodu elemanların bütün bitmediğini belirtir. nextElement() method'u da sıradaki elemanı verir. Bu method çağrılınca sıra bir sonraki elemana geçer. Başka bir deyişle, bu methd iki işi birden yapar.

bu sayede method her çağrıldığıda farklı bir değer, yani sıradaki değeri verir.

Göster Gizle Kopar Satır Gizle Satır Göster
  1 import java.util.*;
  2 public class VectorTest {
  3   public static void main(String[] args){
  4     Vector v=new Vector();
  5     v.addElement("Bir");
  6     v.addElement("İki");
  7     v.addElement("Üç");
  8     v.addElement("Dört");
  9     v.removeElement("Bir");
 10     for(int i=0;i<v.size();i++){
 11       String item=(String) v.elementAt(i);
 12       System.out.println(item);
 13     }
 14     Enumeration e=v.elements();
 15     while(e.hasMoreElements()){
 16       String item=(String) e.nextElement();
 17       System.out.println(item);
 18     }
 19   }
 20 }

Hashtable

Bir grup değere 'index'le değil 'key'le erişmek için Hashtable class'ı kullanılır. İndex int tipinde bir sayıysa key herhangi bir object, örneğin bir string olabilir. Bu class her değeri bir key'le birlikte saklar ve o key verildiğinde o key karşılık gelen değeri verir. Hashable yaratmak için

    Hashtable ht=new Hashtable();

şeklinde bir ifade yeterli. Bir eleman eklemek için

    ht.put("mykey","myvalue");

yazılabilir. Bir değeri almak için de

    String val=(String) ht.get("x");

şeklinde bir ifade yeterli. Burada cast yapmak zorunlu, çünkü Hashtable'dan bir nesne Object tipinde alınıyor. Onu herhangi bir class tipinde kullanmak için cast etmek lazım.

Hashtable'daki bütün değerleri almak için de Enumeration interface kullanılır. Hastable'lar index'le erişim yapmadıkları için bütün eleman ları almanın başka bir yolu yok. Bir döngü yapmak mümkün değildir. Enumeration'la erişimde elemanlar konulduğu sırada alınmayabilir.

Göster Gizle Kopar Satır Gizle Satır Göster
  1 import java.util.*;
  2 public class HashtableTest {
  3   public static void main(String[] args){
  4     Hashtable ht=new Hashtable();
  5     ht.put("x","A");
  6     ht.put("y","B");
  7     ht.put("z","C");
  8     String val=(String) ht.get("x");
  9     System.out.println("val : "+val);
 10     Enumeration e=ht.elements();
 11     while(e.hasMoreElements()){
 12       String item=(String) e.nextElement();
 13       System.out.println(item);
 14     }
 15   }
 16 }

Dosya Listesi

İçindekilerGirişİndex
YukarıİlkÖncekiSonrakiSon
Geriİleri
Yazdır