İPUCU

Java Object Oriented Programming temeline dayanan, çok işlevli, step by step işleyen dilin dökümanlarının paylaşım alanı.

Seçenekler

Nasıl java içinde harita kullanırım gir içeri (HashMap,LinkedHashMap)

27-08-2011 04:08
#1
merttore - ait Kullanıcı Resmi (Avatar)
Üye
Üyelik tarihi:
08/2011
Mesajlar:
149
Teşekkür (Etti):
31
Teşekkür (Aldı):
22
Konular:
28
Ticaret:
(0) %
97 look yarısı google olsa onun yarısıda guess olsa kaldı 24 kişi 1 kişi benim kaldı 23 kişi 1 i yorum attı 22 oldu bunların ceyregi yorum yazan insanlar olsa nerde bunlar nerdeee

BUNU İYİ OKUYUN HASHMAP İÇİN GENEL BİLGİ KODLAR ALTTADIR..

Map anahtar => deger baglantilarini saklamak icin kullanilir. Mesela elimizde bir kelime listesi var ve her kelimeden kac tane oldugunu saymak istiyoruz.


Her kelimeden kac tane oldugunu tutmak icin bir Map<String, Integer> kulanabiliriz. Burada anahtar String tipinde, ve deger de Integer tipindedir. Boylece map'imiz ustunde su islemleri gerceklestirebilecegiz:
  • su kelimeden kac tane var?
  • su kelime mevcut mu?
  • su kelimeden su kadar olsun
Ve kelime sayma islemini soyle yapabiliriz:
  • Bir Map<String, Integer> nesnesi olustur.
  • Listemizdeki her kelime icin:
    • kelime map'in icinde degilse map'a o kelimeden 1 tane oldugunu soyle
    • yok icindeyse map'a o kelimeden kac tane oldugunu sor ve sayiyi bir artirip tekrar map'a koy
Bu sekilde map'imiz her kelimeden kac tane oldugunu tutmus olacak.




Yani ozetle map'in yapabilmesi gereken islemler:
  • Su anahtar nesnesi icinde mevcut mu? Map.containsKey(anahtar)
  • Su anahtar nesnesi ile baglantili nesne nedir? Map.get(anahtar)
  • Su anahtar nesnesi ile su nesneyi bagla. Map.put(anahtar, deger)
Map sadece bir interface (arayuz) ve yukarida bir Map'in ne yapabilmesi gerektigini anlattik. HashMap da bir Map'tir ve bu islemleri (dogru sekilde kullanildiginda) oldukca hizli bir sekilde gerceklestirir.

HashMap nasil calisir?


Mesela 40 tane kucuk gozu olan bir dolabin var, ve de bir suru kitabin. Fakat aradigin kitabi bulmakta zorluk cekiyorsun. Hashing stratejisini kullanarak dolabini su sekilde duzenleyebilirsin:
  • Bir kitabin hash degeri = (kitabin isminin ilk harfinin harf sirasi) + 29 * (kitabin isminin ikinci harfinin harf sirasi). Yani "Bu ulke" isimli bir kitabin hash degeri 2 + 29 * 25 = 729
  • Bir kitap, sadece dolaptaki (kitabin hash degeri) mod (dolabin goz sayisi) numarali goze konabilir. Yani "Bu ulke" isimli bir kitabi 729 % 40 = 9 numarali goze koyabilirz.
Peki dolabi kitap koymak yerine mesela araba parcasi koymak icin kullaniyorsak? Yine ayni yontemi kullaniriz, ama araba parcasinin hash degerini baska bir sekilde hesaplamamiz gerekiyor. Mesela araba parcasinin seri numarasi olabilir.

(not: yukarida aslinda HashMap yerine HashSet'i (Hash'li kume) anlatmisim. Fakat kumenin elemanlarina bir deger ilistirirsek HashMap elde ederiz. Mesela HashMap<Kitap, Integer> elde etmek icin kitaplarimiz arasina uzerinde kocaman bir sayi yazan bir kagit koyariz )


HashMap da yaklasik bu sekilde isler. Mesela bir HashMap<Anahtar, Deger> nesnesi olusturdugumuzda hashmap icinde N tane goz ayirir[*]. HashMap'e bir anahtar nesnesi koyacagimiz zaman hashmap:
  • anahtar nesnesinin hash degerini bulur
  • hash degerinden nesnenin hangi goze koyulacagini hesaplar
  • nesneyi o goze koyar
Bir anahtar degerini arayacakken yine ayni stratejiyi kullanir.


Burada onemli olan sey sudur: nesnenin hash degeri nasil hesaplanir?

Object.hashCode() metodu bir nesnenin hash degerini verir. Object'in alt siniflari hashCode metodunu yeniden tanimlayabilirler (ve gerektiginde tanimlamalidirlar da). Eger yeni bir sinif yaziyorsak ve bu siniftan olusturulan nesneleri HashMap veya HashSet ile kullanabilmek istiyorsak suna dikkat etmeliyiz:
  • Ayni olan nesnelerin hash degeri ayni olmali (a.equals(b) true donduruyorsa a ile b aynidir)
  • Farkli olan nesnelerin hash degeri farkli olmak zorunda degil. Fakat performans acisindan olabildigince farkli olmasi gerekir (farkli nesneleri dolabin farkli gozlerine dagitmak icin)

    Kod:
    Product.java
    package javamapexample;
    /**
    *
    * @author tunamert-tore
    */
    public class Product {
    private int id;
    private String name;
    private int price;
    public Product(int id,String name,int price) {
    this.id = id;
    this.name = name;
    this.price = price;
    }
    /**
    * @return the id
    */
    public int getId() {
    return id;
    }
    /**
    * @param id the id to set
    */
    public **** setId(int id) {
    this.id = id;
    }
    /**
    * @return the name
    */
    public String getName() {
    return name;
    }
    /**
    * @param name the name to set
    */
    public **** setName(String name) {
    this.name = name;
    }
    /**
    * @return the price
    */
    public int getPrice() {
    return price;
    }
    /**
    * @param price the price to set
    */
    public **** setPrice(int price) {
    this.price = price;
    }
    }
    Main.java
    package javamapexample;
    import java.util.HashMap;
    import java.util.Iterator;
    import java.util.LinkedHashMap;
    import java.util.Map;
    /**
    *
    * @author tunamert-tore
    */
    public class Main {
    /**
    * @param args the command line arguments
    */
    public static **** main(String[] args) {
    //Lets create first products by using Product class
    Product p1 = new Product(1,”car”,10000);
    Product p2 = new Product(2,”computer”,1000);
    Product p3 = new Product(3,”phone”,400);
    Product p4 = new Product(4,”speakers”,100);
    Product p5 = new Product(5,”speakers2″,125);
    Map<String,Product> productMap = new HashMap<String, Product>();
    productMap.put(“car”, p1);
    productMap.put(“computer”, p2);
    productMap.put(“phone”, p3);
    productMap.put(“speakers”, p4);
    //what will be happened if a same key is inserted again
    //this will replace the old product with a new one
    productMap.put(“speakers”, p4);
    //HashMap allows programmers to have only one Null key and many null values
    productMap.put(null, p5);
    //productMap.put(null, null); VALID
    //productMap.put(“phone”, null); VALID
    System.out.println(“getting the phone element (id for the phone) with key phone –> ” + productMap.get(“phone”).getId() );
    // Iteration starts
    //ordering of the elements in a HashMap is not sorted
    //so that ordering will be unpredictable
    //use TreeMap if you want ordering
    Iterator it = productMap.keySet().iterator();
    while (it.hasNext()) {
    Object key = it.next();
    System.out.println(“key –> ” + key + ” value –> ” + ” id -> ” + productMap.get(key).getId() + ” name -> ” + productMap.get(key).getName());
    }
    System.out.println(“\nLinkedHashMap starts\n”);
    Map<String,Product> productMapLinked = new LinkedHashMap<String, Product>();
    productMapLinked.put(“1″, p2);
    productMapLinked.put(“2″, p3);
    productMapLinked.put(“3″, p1);
    Iterator it2 = productMapLinked.keySet().iterator();
    while (it2.hasNext()) {
    Object key = it2.next();
    System.out.println(“key –> ” + key + ” value –> ” + productMapLinked.get(key).getName());
    }
    //If you use TreeMap in your application
    //You will need to override equals() and hashCode() 
    }
    }
    Sample output;
    run:
    getting the phone element (id for the phone) with key phone –> 3
    HashMap starts
    key –> null value –> id -> 5 name -> speakers2
    key –> computer value –> id -> 2 name -> computer
    key –> car value –> id -> 1 name -> car
    key –> phone value –> id -> 3 name -> phone
    key –> speakers value –> id -> 4 name -> speakers
    LinkedHashMap starts
    key –> 1 value –> computer
    key –> 2 value –> phone
    key –> 3 value –> car
    BUILD SUCCESSFUL (total time: 1 seconds)
Kullanıcı İmzası
Konu merttore tarafından (09-09-2011 02:26 Saat 02:26 ) değiştirilmiştir.
turqud Teşekkür etti.

27-08-2011 23:51
#2
prisoneer - ait Kullanıcı Resmi (Avatar)
Üye
Üyelik tarihi:
08/2011
Mesajlar:
621
Teşekkür (Etti):
11
Teşekkür (Aldı):
46
Konular:
3
Ticaret:
(0) %
eline saglık kardeşim tşk
Kullanıcı İmzası
©º°¨¨°º©©º°¨¨°º©HARRAN©º°¨¨°º©©º°¨¨°º©
ş€ytanın Avukatı
30-08-2011 18:57
#3
merttore - ait Kullanıcı Resmi (Avatar)
Üye
Üyelik tarihi:
08/2011
Mesajlar:
149
Teşekkür (Etti):
31
Teşekkür (Aldı):
22
Konular:
28
Ticaret:
(0) %
Bir şey değil kardeş
Kullanıcı İmzası
15-09-2011 12:32
#4
turqud - ait Kullanıcı Resmi (Avatar)
Üye
Üyelik tarihi:
09/2008
Yaş:
28
Mesajlar:
2.433
Teşekkür (Etti):
183
Teşekkür (Aldı):
359
Konular:
606
Ticaret:
(0) %
Saol Gerekli Bir Sey Saol ....
15-09-2011 18:13
#5
merttore - ait Kullanıcı Resmi (Avatar)
Üye
Üyelik tarihi:
08/2011
Mesajlar:
149
Teşekkür (Etti):
31
Teşekkür (Aldı):
22
Konular:
28
Ticaret:
(0) %
Alıntı:
turqud´isimli üyeden Alıntı Mesajı göster
Saol Gerekli Bir Sey Saol ....
Javacıların kesinlikle bilmesi gereken bir şey ama javaya ilgi yok
Kullanıcı İmzası

Bookmarks


« Önceki Konu | Sonraki Konu »
Seçenekler

Yetkileriniz
Sizin Yeni Konu Acma Yetkiniz var yok
You may not post replies
Sizin eklenti yükleme yetkiniz yok
You may not edit your posts

BB code is Açık
Smileler Açık
[IMG] Kodları Açık
HTML-Kodları Kapalı
Trackbacks are Kapalı
Pingbacks are Kapalı
Refbacks are Kapalı