title: Why did the language designers of Java preferred chaining over open addressing for most hash based structures except for some like ThreadLocal?
body: <p>I know the difference between Open Addressing and Chaining for resolving hash collisions . Most of the basic hash based data structures like <code>HashSet</code>,<code>HashMap</code> in Java primarily use chaining technique. I read that ThreadLocal actually uses a probing scheme . So I want to understand why is open addressing not so much used in Java ? I mean it would be difficult to delete records using that scheme , in the sense that you have to mark those cells with some special handling . However it seems like memory requirement will be low for open addressing scheme.</p>
  
  <p><em>Edit</em> : I just want to understand the possible major reason/reasons for this design decision . I do not want finer details . Also I would like to know why ThreadLocal uses the lesser common technique of open addressing . I guess the two answers can be related together . So I prefer to ask in the same question itself.</p>