public TypeV next() {
      // 'next' actually knows what the next value will be - it had to
      // figure that out last go-around lest 'hasNext' report true and
      // some other thread deleted the last value.  Instead, 'next'
      // spends all its effort finding the key that comes after the
      // 'next' key.
      if( _idx != 0 && _nextV == null ) throw new NoSuchElementException();
      _prevK = _nextK;          // This will become the previous key
      _prevV = _nextV;          // This will become the previous value
      _nextV = null;            // We have no more next-key
      // Attempt to set <_nextK,_nextV> to the next K,V pair.
      // _nextV is the trigger: stop searching when it is != null
      while( _idx<length() ) {  // Scan array
        _nextK = key(_idx++); // Get a key that definitely is in the set (for the moment!)
        if( _nextK != null && // Found something?
            _nextK != TOMBSTONE &&
            (_nextV=get(_nextK)) != null )
          break;                // Got it!  _nextK is a valid Key
      }                         // Else keep scanning
      return _prevV;            // Return current value.
    }
Returns the value to which the specified key is mapped, or {@code null}
 if this map contains no mapping for the key.
 <p>More formally, if this map contains a mapping from a key {@code k} to
 a value {@code v} such that {@code key.equals(k)}, then this method
 returns {@code v}; otherwise it returns {@code null}.  (There can be at
 most one such mapping.)
@throws NullPointerException if the specified key is null
jctools-core/src/main/java/org/jctools/maps/NonBlockingIdentityHashMap.java