Hirdetés

Keresés

Új hozzászólás Aktív témák

  • Atapi
    senior tag

    Sziasztok!
    A lenti kódban ezt a sort nem értem:
    String prevvalue=(String)newmap.put(3,"is great");

    Tudnátok segíteni az értelmezésében? köszönöm

    Ez: newmap.put(3,"is great") --> Beleteszi a 3. helyre az "is great" stringet. Ez eddig világos.
    De nem értem, hogy miért kell előtte (String) castolni és azt sem értem, hogy prevvalue értéke miért nem az újonnan berakott érték, azaz "is great" string lesz?

    Kódrészlet:
    public class HashMapDemo {
    public static void main(String args[]) {
    // create hash map
    HashMap newmap = new HashMap();

    // populate hash map
    newmap.put(1, "tutorials");
    newmap.put(2, "point");
    newmap.put(3, "is best");

    System.out.println("Map value before change: "+ newmap);

    // put new values at key 3
    String prevvalue=(String)newmap.put(3,"is great");

    // check returned previous value
    System.out.println("Returned previous value: "+ prevvalue);

    System.out.println("Map value after change: "+ newmap);
    }
    }

    Futási eredmény:
    Map value before change: {1=tutorials, 2=point, 3=is best}
    Returned previous value: is best
    Map value after change: {1=tutorials, 2=point, 3=is great}

    Innen vannak a fenti sorok.

    "Ez: newmap.put(3,"is great") --> Beleteszi a 3. helyre az "is great" stringet."

    lehet, hogy csak nem figyeltél a megfogalmazásra, de ez az állítás nem igaz. a map kulcs-érték párokat tárol, az elemeknek nincs rögzített helye (mint pl egy List esetén az x. elem), legalábbis a hashmap rendezetlen, így nincs garancia arra, hogy mi hova kerül, csak az garantált, hogy egy kulcshoz egy adott érték tartozik, és a kulcs alapján ezt az értéket kapod vissza. ez azt jelenti, hogy nem a 3. helyre helyezed a példában a sringet, hanem a 3 kulcshoz rendeled hozzá. a példa szerencsétlen abból a szempontból, hogy kiíratásnál a természetes sorrend érvényesül, azaz növekvő sorrendben kerülnek kiírásra a kulcs-elem párok, de ez nem mindig van így, nem lehet rá számítani. lehet, hogy most feleslegesen téptem a billentyűzetem és tudod ezeket, de a megfogalmazásod nem ezt sugallta.

  • floatr
    veterán

    Sziasztok!
    A lenti kódban ezt a sort nem értem:
    String prevvalue=(String)newmap.put(3,"is great");

    Tudnátok segíteni az értelmezésében? köszönöm

    Ez: newmap.put(3,"is great") --> Beleteszi a 3. helyre az "is great" stringet. Ez eddig világos.
    De nem értem, hogy miért kell előtte (String) castolni és azt sem értem, hogy prevvalue értéke miért nem az újonnan berakott érték, azaz "is great" string lesz?

    Kódrészlet:
    public class HashMapDemo {
    public static void main(String args[]) {
    // create hash map
    HashMap newmap = new HashMap();

    // populate hash map
    newmap.put(1, "tutorials");
    newmap.put(2, "point");
    newmap.put(3, "is best");

    System.out.println("Map value before change: "+ newmap);

    // put new values at key 3
    String prevvalue=(String)newmap.put(3,"is great");

    // check returned previous value
    System.out.println("Returned previous value: "+ prevvalue);

    System.out.println("Map value after change: "+ newmap);
    }
    }

    Futási eredmény:
    Map value before change: {1=tutorials, 2=point, 3=is best}
    Returned previous value: is best
    Map value after change: {1=tutorials, 2=point, 3=is great}

    Innen vannak a fenti sorok.

    JavaDoc [link]

    A metódus visszatérési értéke a kulccsal korábban tárolt érték, vagy ha az nem volt, akkor null. A cast meg azért van, mert nem generics-es a map definíciója. Helyesen így lenne:

    Map<Integer, String> newmap = new HashMap<Integer, String>();
    ...
    String prevvalue = newmap.put(3, "is great");

Új hozzászólás Aktív témák