Zdravim,

To je proste: Map#hashCode() presne definuje ze vysledek musi byt vypocitan 
jako soucet hashcode vsech zaznamu. Pridanim noveho prvku se tedy zmeni hodnota 
hashCode. 

Jenomze HashSet (resp. HashMap, kterou interne pouziva) zarazuje i hleda 
zaznamy podle hashCode(). Jakmile se hashCode zmeni, tak hleda jinde a nenajde.

Plati obecne pravidlo:
  Objekty vkladane do hash mapy NESMI MENIT svuj hashCode()! Tedy alespon po 
dobu, co jsou v mape.
Konkretne pak plati:
  Kolekce (Map, Collection) vlozene do hash mapy se NESMI MODIFIKOVAT.

Pokud potrebujete mit v mnozine kolekce ktere bezne modifikujete, pouzijte 
IdentityHashMap.


> -----Original Message-----
> From: [EMAIL PROTECTED] 
> [mailto:[EMAIL PROTECTED] Behalf Of Tomas Zverina
> Sent: Wednesday, May 23, 2007 11:24 AM
> To: Java
> Subject: hashset contains wtf
> 
> 
> Zdravim,
> 
> nekdo do me prosim vase kopnete, a vysvetlete mi, proc je vystup 
> nasledujiciho programu:
> 
> import java.util.*;
> 
> public class HashSetPokus {
> 
>    public static void main(String[] args) {
> 
>      {
>        // Experiment s HashSet
>        Map element1 = new HashMap();
>        Set<Map> container1 = new HashSet<Map>();
>        container1.add(element1);
>        System.out.println("1a: "+container1.contains(element1));
>        container1.iterator().next().put("a", 123);
>        System.out.println("1b: "+container1.contains(element1));
>      }
>      {
>        // Experiment s ArrayList
>        Map element2 = new HashMap();
>        List<Map> container2 = new ArrayList<Map>();
>        container2.add(element2);
>        System.out.println("2a: "+container2.contains(element2));
>        container2.iterator().next().put("a", 123);
>        System.out.println("2b: "+container2.contains(element2));
>      }
> 
>    }
> 
> }
> 
> takovyhle:
> 
> 1a: true
> 1b: false
> 2a: true
> 2b: true
> 
> misto ocekavaneho:
> 
> 1a: true
> 1b: true
> 2a: true
> 2b: true
> 
> Ja jsem z toho zverina.
> 
> -- 
> S pozdravem,
> 
>                 Tomas Zverina
> 
> Multimedia atelier s.r.o.
> Na Dolinách 4
> 147 00 Praha 4
> IČO: 25127071
> tel.: 241 433 120
> e-mail: [EMAIL PROTECTED]
> http://www.m-atelier.cz/
> 
> Společnost Multimedia atelier s.r.o. je zapsána u 
> rejstříkového soudu v
> Praze, oddíl C, vložka 51961.
> 

Odpovedet emailem