Doubles.constrainToRange(double,double,double) and Floats.constrainToRange(float,float,float) both cause unnecessary boxing of their arguments. Both call Preconditions.checkArgument(boolean, String, **Object**, **Object**) which causes the boxing.

Can be easily fixed by introducing an overloaded version of checkArgument for floats and doubles. For ints and longs these versions already exist:
Preconditions.checkArgument(boolean, String, **int**, **int**)
Preconditions.checkArgument(boolean, String, **long**, **long**)
which is also why constrainToRange does not have the same problem in the Ints, Shorts & Longs packages.
if (values == null) {
        return 0;
      }
      int oldCount = values.size();
      if (occurrences >= oldCount) {
        values.clear();
      } else {
        Iterator<V> iterator = values.iterator();
        for (int i = 0; i < occurrences; i++) {
          iterator.next();
          iterator.remove();
        }
      }
      return oldCount;
    }
    @Override
    public void clear() {
      multimap.clear();
    }
    @Override
    public Set<K> elementSet() {
      return multimap.keySet();
    }
    @Override
    Iterator<K> elementIterator() {
      throw new AssertionError("should never be called");
    }
  }
  
  abstract static class Entries<K, V> extends AbstractCollection<Map.Entry<K, V>> {