title: clarifying facts behind Java's implementation of HashSet/HashMap
body: <p>1.
  I understand the different hash map mechanisms and the ways in which key collisions are handled (either open addressing -linear/quadratic probing, chaining, extendable hashing, etc.  Which one does HashSet/HashMap make use of?</p>
  
  <p>2.
  I realise that a good HashMap relies on a good hash function.  How does Java's HashSet/HashMap hash the objects?  I know that there is a hash function but so far for strings I have not needed to implement this.  What if I now want to Hash a Java Object that I create - do I need to implement the hash function?  Or does Java have a built in way of creating a hash code?</p>
  
  <p>I know that the default implementation cannot be relied on as it bases the hash function on the memory address which is not constant.</p>