Dubluve.net » hashCode http://www.dubluve.net Biz de yazılımcıyız Wed, 30 Jul 2014 22:06:10 +0000 tr-TR hourly 1 http://wordpress.org/?v=3.9.1 Java Makale #2 – HashMap vs HashTable http://www.dubluve.net/2011/12/13/java-makale-2-hashmap-vs-hashtable/ http://www.dubluve.net/2011/12/13/java-makale-2-hashmap-vs-hashtable/#comments Tue, 13 Dec 2011 18:42:07 +0000 http://dubluve.net/?p=550 HashMap sınıfı, Map arayüzünün tüm özelliklerini hashing (bir nevi verileri tekil integer değerlere dönüştürme işlemi) özelliğiyle gerçekleyen Java sınıfıdır. Hemen terimleri ayrı ayrı açıklayalım.

Map arayüzü, ikili verilerinizi (key ve value) tutmanızı sağlayacak kuralları belirler. HashMap sınıfı ise key verilerinizin hash değerlerini (ki bu değer  Java’da tüm sınıfların atası olan Object sınıfının hashCode metodundan gelir) Map‘in key verisi olarak tutar (HashMap‘ten başka TreeMap ve AbstractMap gibi Map türleri de mevcuttur). Örneğin, bir gruptaki kişilerin yaşlarını <isim,yaş> ikilisi şeklinde tutabilirsiniz. Bir nevi indeks değeri istediğiniz bir nesne olabilen dizi diyebiliriz.

HashMap sınıfının en büyük özelliği put ve get işlemlerini yani bir key değerine ait value değerini tutma ve istenilen zamanda okuma işlemlerini birim zamanda yapabilmesidir. Deminki örnek üzerinden gidersek, gruptaki Hakan’ın yaşı 24, Melis’in yaşı 21 ise, Hakan ve Melis’in yaşlarını birim zamanda edinebiliyoruz.

Şimdi de kod üzerinden nasıl kullanıldığına bakalım;

HashMap ages = new HashMap();

ages.put("Hakan", new Integer(24));
ages.put("Melis", new Integer(21));

Integer ageOfHakan = (Integer) ages.get("Hakan");
Integer ageOfMelis = (Integer) ages.get("Melis");

Kullanımı bu kadar basit. Kod parçasının 6. ve 7. satırlarında dikkat ederseniz veriyi alırken Integer cast işlemi yapmak zorunda kaldık. Çünkü, HashMap nesnesi her tipten value değerine sahip olabilir. get metodu da aslında bir Object nesnesi döndürüyor. Buradaki cast işleminin sakıncaları büyük ama konumuz o değil tabii ki. Başka bir yazıda da buna değinelim.

Şimdi gelelim HashTable sınıfına. Zaten söylenmesi gereken birçok şeyi HashMap ile birlikte söyledik :) Hemen HashTable sınıfı ve HashMap sınıfı arasındaki farkları sıralayalım (HashMap sınıf tanımında belirtildiğine göre):

  • HashTable sınıfı synchronized, HashMap sınıfı unsynchronized şekilde çalışmaktadır. Benzer fark, StringBuffer ve StringBuilder sınıfları arasında da mevcuttur. Bu konu hakkındaki daha önceki yazıma bakabilirsiniz.
  • HashMap sınıfı null key ve value değerlerine izin vermektedir. HashTable sınıfı null değerlere izin vermez.

Yine bir reçete vermek gerekir bu noktada değil mi? :)

  • Multithread çalışıyorsanız ve senkronizasyon işlemi sizin için önemliyse (ve senkronizasyın işlemini elle yapmaya üşeniyorsanız) HashTable sınıfını
  • Diğer hemen tüm durumlarda HashMap sınıfını kullanabilirsiniz.
]]>
http://www.dubluve.net/2011/12/13/java-makale-2-hashmap-vs-hashtable/feed/ 0