Path: csiph.com!newsfeed.hal-mli.net!feeder3.hal-mli.net!newsfeed.hal-mli.net!feeder1.hal-mli.net!border3.nntp.dca.giganews.com!border1.nntp.dca.giganews.com!nntp.giganews.com!npeer01.iad.highwinds-media.com!news.highwinds-media.com!feed-me.highwinds-media.com!nx02.iad01.newshosting.com!newshosting.com!news-out.readnews.com!transit3.readnews.com!news-out.news.tds.net!newsreading01.news.tds.net!53ab2750!not-for-mail From: "Robert Klemme" Subject: Re: hashCode Message-ID: <502943B8.56784.calajapr@time.synchro.net> X-Comment-To: Arne Vajhøj Newsgroups: comp.lang.java.programmer In-Reply-To: <502943B3.56757.calajapr@time.synchro.net> References: <502943B3.56757.calajapr@time.synchro.net> X-FTN-AREA: COMP.LANG.JAVA.PROGRAMMER X-FTN-MSGID: 1:261/38 86d7d342 X-FTN-REPLY: 1:261/38 1ed7e32e Content-Type: text/plain; charset=IBM437 Content-Transfer-Encoding: 8bit X-Gateway: time.synchro.net [Synchronet 3.16a-Win32 NewsLink 1.98] Lines: 83 Date: Mon, 13 Aug 2012 18:36:23 GMT NNTP-Posting-Host: 69.21.70.65 X-Complaints-To: news@tds.net X-Trace: newsreading01.news.tds.net 1344882983 69.21.70.65 (Mon, 13 Aug 2012 13:36:23 CDT) NNTP-Posting-Date: Mon, 13 Aug 2012 13:36:23 CDT Organization: tds.net X-Received-Bytes: 3956 Xref: csiph.com comp.lang.java.programmer:17836 To: Arne Vajhøj From: Robert Klemme On 12.08.2012 22:59, Arne Vajhoj wrote: > On 8/12/2012 11:06 AM, Robert Klemme wrote: >> On 11.08.2012 01:27, Arne Vajhoj wrote: >>> On 8/10/2012 6:22 PM, bob smith wrote: >>>> On Friday, August 10, 2012 11:34:28 AM UTC-5, Eric Sosman wrote: >>>>> On 8/10/2012 11:47 AM, bob smith wrote: >>>>>> Is it always technically correct to override the hashCode function >>>>>> like so: >>>>>> @Override >>>>>> public int hashCode() { >>>>>> return 1; >>>>>> } >>>>>> Would it be potentially better if that was Object's implementation? >>>>> >>>>> Define "better." >>>> >>>> Better in the sense that you would never HAVE to override hashCode. >>>> >>>> Now, there are cases where you HAVE to override it, or your code is >>>> very broken. >>> >>> It is not broken. >>> >>> It will perform poorly in many cases. >> >> Well, I would go as far as to say that it will perform poorly in all >> cases where hashCode() is actually needed > > More or less. > >> - and that makes it broken. > > This thread started about whether it is correct. The term correct > has a very specific meaning in programming and that always return 1 > code is correct. > > Now you talk about broken. Actually it wasn't me who brought up the term. :-) > If broken means not good, then you are right. > If broken means not correct, then you are wrong. I suspect > that broken is not very well defined. Right. :-) >> The whole idea of hashing is based on the fact that the hash code >> _somehow_ represents the item to be hashed. If all items have the same >> constant hash code there is no point in hashing at all. So while it >> does work, it does not work as intended. > > It disable the entire hashing functionality and a HashMap get > characteristics of ArrayList. An ArrayList allows multiple occurrences of the same instance - and does not store key value pairs. That won't be the case with HashMap as equals() (if properly implemented) will prevent that (albeit slowly, or more correct: slower than with a proper implementation of hashCode()). Also, a HashMap will degenerate more to a LinkedList via the chaining of a bucket's entries. > But the code should actually work. Yes, sort of - depending on whether O(1) is a requirement or not. Still, the idea to implement hashCode() in Object in a way to return a constant to avoid necessity of overriding it is crazy - especially since you then cannot efficiently use Object as hash key - which you can today. Kind regards robert -- remember.guy do |as, often| as.you_can - without end http://blog.rubybestpractices.com/ --- BBBS/Li6 v4.10 Dada-1 * Origin: Prism bbs (1:261/38) --- Synchronet 3.16a-Win32 NewsLink 1.98 Time Warp of the Future BBS - telnet://time.synchro.net:24