private void putSingle(final K key, final V value) {
        //make sure that any pending removal requests for this object are removed
        requestedToRemove.remove(key);

        //we need to add only if object is not already there
        if (isChange(key, value)) {
            //only if there was no add request yet we need to add a command to process queue
            if (!requestedToAdd.containsKey(key)) {
                mapChangeProcessQueue.add(new Pair<>(key, true));
            }
            requestedToAdd.put(key, value);
        } else {
            //make sure there is no pending change which might change value
            requestedToAdd.remove(key);
        }
    }
replaces objects in this Map completely with given objects
<br>
Same effect could be reached by calling removeAll() followed by add(newObjects),
but performance is better when calling replace() method instead
main/src/main/java/cgeo/geocaching/utils/AsynchronousMapWrapper.java