Java - Mapy

Programovacie jazyky, rady, poradňa...
pitbullko
Light Star
Light Star
Používateľov profilový obrázok
Príspevky: 294
Registrovaný: 13 nov 2009, 8:19
Bydlisko: „Keby som bol postavený pred rozhodnutie medzi zbabelosťou a násilím, zvolil by som násilie“[Gandhi]

Java - Mapy

Príspevok od používateľa pitbullko »

Ahojte,
vedel by mi niekto vysvetliť na čo sa používajú mapy? Ako fungujú. Prípadne mi sem postunúť nejaký jednoduchý kód.
Ja som našiel nejaké kódy jednoduché, napr. tento. Vedel by mi ho niekto prosím vysvetliť - jednotlivé riadky kódu napr. Set, Iterator. Mne to pripadá ako nejaký ArrayList alebo nejaký zoznam. To prvé viem, že je kľúč. Druhá je hodnota.
Díky

Kód: Vybrať všetko

import java.util.*;

public class HashMapDemo {

  public static void main(String[] args) {

    HashMap hm = new HashMap();
    hm.put("Rohit", new Double(3434.34));
    hm.put("Mohit", new Double(123.22));
    hm.put("Ashish", new Double(1200.34));
    hm.put("Khariwal", new Double(99.34));
    hm.put("Pankaj", new Double(-19.34));
    Set set = hm.entrySet();

    Iterator i = set.iterator();

    while(i.hasNext()){
      Map.Entry me = (Map.Entry)i.next();
      System.out.println(me.getKey() + " : " + me.getValue() );
    }

    //deposit into Rohit's Account
    double balance = ((Double)hm.get("Rohit")).doubleValue();
    hm.put("Rohit", new Double(balance + 1000));

    System.out.println("Rohit new balance : " + hm.get("Rohit"));

  }
}
javatar
Hardcore addict
Hardcore addict
Používateľov profilový obrázok
Príspevky: 6112
Registrovaný: 12 aug 2010, 14:49
Bydlisko: I don't exist at all.

Re: Java - Mapy

Príspevok od používateľa javatar »

HashMapa sluzi k rychlemu pristupu k objektu podla kluca. Prvky vkladas a vyberas so zlozitostou O(1), takze je to naozaj rychle. Je to teda kolekcia vhodna pri situaciach kedy mas vela nezoradenych prvkov a potrebujes rychly pristup ku konkretnemu prvku.
K jednotlivym riadkom kodu:
HashMap hm = new HashMap(); toto isto vies co je
hm.put("Mohit", new Double(123.22)); vlozenie prvku typu double pod klucom typu string
Set set = hm.entrySet(); vrati objekt typu set v ktorom su sparovane prvky kluca a objektu
Iterator i = set.iterator(); vytvori iterator pre prehliadku kolekcie
vo while cykle prechadzas Set pomocou iteratora

zvysok by mal byt jasny
pitbullko
Light Star
Light Star
Používateľov profilový obrázok
Príspevky: 294
Registrovaný: 13 nov 2009, 8:19
Bydlisko: „Keby som bol postavený pred rozhodnutie medzi zbabelosťou a násilím, zvolil by som násilie“[Gandhi]

Re: Java - Mapy

Príspevok od používateľa pitbullko »

Díky za ozrejmenie.
Teda ako hodnota môže byť hocijaký objekt?
Neviem aká je napr. výhoda oproti ArrayListu? Keď napr. hľadám objekt podľa kľúča prehľdávajú sa všetky kľúče pokiaľ nie je zhoda?
Mne sa zdá, že je to to isté. Akurát, že tam sú indexy.
Tomu Set-u moc nerozumiem, prečo to potrebujem?
javatar
Hardcore addict
Hardcore addict
Používateľov profilový obrázok
Príspevky: 6112
Registrovaný: 12 aug 2010, 14:49
Bydlisko: I don't exist at all.

Re: Java - Mapy

Príspevok od používateľa javatar »

Ten set je tam pre prehladavanie - hashmapu neprehladas ako ArrayList

ano - mozes tam strcit akykolvek objekt a ako kluc moze sluzit tiez akykolvek objekt ale unika mi pointa takejto hesmapy

Vyhoda oproti arraylistu:
ak je arraylist usporiadany vies ho prehladat z logaritmickou zlozitostou a ak nie je tak ho prehladas hned

hashmapa zhashuje kluc ktory si zadal a na jeho zaklade vypocita index objektu ktory hladas, takze kym arraylist musi pozerat vela objektov, hashmapa ta hned odkaze na objekt ktory hladas

v pamati to velmi zmysel nema (resp. vykonnostny rozdiel je tam maly) ale pokial obsahuje index kde sa nachadza objekt na disku tak dokaze nenormalne zvysit vykon aplikacie (samozrejme takej kde ma pouzitie hashmapy zmysel) a to bude platit az kym nebudu vsetky disky SSD

ja ju casto pouzivam hlavne koli tomu ze ma metodu get podla kluca (co arraylist nema) a mam istotu rychlosti a lahkeho vyuzitia
Napísať odpoveď