title: Does .NET have a Dictionary implementation that is equivalent to Java's ConcurrentHashMap?
body: <p>To recap for those .NET gurus who might not know the Java API:</p>
  
  <p><a href="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ConcurrentHashMap.html" rel="nofollow noreferrer">ConcurrentHashMap</a> in Java has atomic methods (i.e. require no external locking) for common Map modification operations such as:</p>
  
  <pre><code>putIfAbsent(K key, V value)
  remove(Object key, Object value)
  replace(K key, V value)
  </code></pre>
  
  <p>It also allows iteration over the keyset without locking (it takes a copy at the start of iteration) and <code>get()</code> operations can generally be interleaved with calls to <code>put()</code> without blocking (it uses fine grained lock striping <a href="http://en.wiktionary.org/wiki/IIRC" rel="nofollow noreferrer">IIRC</a>).</p>
  
  <p>Anyway, my question is: <strong>does .NET have an equivalent Dictionary implementation?</strong></p>
  
  <p>I guess more generally, I'd be keen to know if .NET has a more general set of thread safe collection libraries.  Or concurrency utilities in general - equivalent to <a href="http://en.wikipedia.org/wiki/Doug_Lea" rel="nofollow noreferrer">Doug Lea</a>'s <code>java.util.concurrent</code> libraries.</p>