Dovolil bych si nesouhlasit ... protoze pak by metoda contains byla treba v 
rozporu s metodou remove, protoze contains
by vracela true a remove false, protoze objekt se zmenenym hashem z hashset 
nesmazete ...

Jirka

Martin Kuba napsal(a):
> Rudolf PECINOVSKÝ wrote:
>>> Děkuji za objasnění, už rozumím (naprosto dokonale). 
>>> Jednoznačně je to chyba v javadoc. 
>> Možná se moje odpověď nebude někomu líbit, ale podle mne v javadoc chyba
>> není. Toto chování vyplývá z vlastností hešových tabulek a měla by to proto
>> vysvětlit učebnice (nebo lektor) jako obecnou vlastnost všech objektů
>> využívajících hešových tabulek. Jestli k vám takováto informace ještě
>> nepronikla, spílejte svým učitelům a autorům učebnic, z nichž jste se Javu
>> učili.
> 
> Dovolil bych si nesouhlasit. Javadoc tvrdí, že metoda contains()
> u HashSet používá pouze equals(), což není pravda, a proto
> je to chyba dokumentace. To, že používá hashovací tabulku,
> přece neznamená, že contains() nemůže hrubou silou projít
> všechny položky. Sice by to nebylo moc efektivní, ale
> neporušovalo by to kontrakt zděděný z Set.
> 
> Čili javadoc naznačuje, že implementace contains vypadá
> nějak takto:
> 
> boolean contains(Object o) {
>     for(Iterator i = this.iterator();i.hasNext();) {
>        Object e = i.next();
>        if(o==null) {
>         if( e==null) return true;
>        } else {
>         if(o.equals(i.next())) return true;
>        }
>     }
>     return false;
> }
> 
> což není pravda.
> 
> Makub

-- 
Jiří Mareš (mailto:[EMAIL PROTECTED])
ČSAD SVT Praha, s.r.o. (http://www.svt.cz)
Czech Republic

Odpovedet emailem