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