code: @Override
      public V put(K key, V value) {
          LinkedHashMapSegment<K, V> seg = segmentFor(key.hashCode());
          try {
              seg.lock.lock();
              return mapEventListener.onPutEntry(key, value, seg.put(key, value));
          } finally {
              seg.lock.unlock();
          }
      }
docs: Associates the specified value with the specified key in this map.
  If the key existed in the map, the entry will be replaced by specified entry.
  This method will call the putting entry event when the method is called.
  
  @param key   key with which the specified value is to be associated
  @param value value to be associated with the specified key
  @return the previous value associated with <tt>key</tt>, or
  <tt>null</tt> if there was no mapping for <tt>key</tt>.
  (A <tt>null</tt> return can also indicate that the map
  previously associated <tt>null</tt> with <tt>key</tt>,
  if the implementation supports <tt>null</tt> values.)