def <<(entry)
      if index = @cache[entry]
        entries[index] = entry
      else
        @cache[entry] = size
        entries << entry
      end
      self
    end
def <<(entry)
      if index = @cache[entry]
        entries[index] = entry
      else
        @cache[entry] = size
        entries << entry
      end
      self
    end
Add or update an entry in the set

 If the entry to add isn't part of the set already,
 it will be added. If an entry with the same cache
 key as the entry to add is part of the set already,
 it will be replaced with the given entry.

 @param [Object] entry
   the entry to be added

 @return [OrderedSet] self

 @api private