  public synchronized void putAll(Map m)
    throws IllegalArgumentException {
    if (m==null) {
      throw new IllegalArgumentException("Can't copy a null map.");
    }
    if (size()+m.size()>_loadThresh) {
      // this may be overkill if m substantially duplicates our keys
      setCapacity((int)((double)(size()+m.size())/getLoadFactor()));
    }
    // Note that since m is a general map, this iterator is the _only_
    // way we have to access the key/value pairs
    for (Iterator i=m.entrySet().iterator();i.hasNext();) {
      Entry e=(Entry)i.next();
      Object k=e.getKey();
      if (k==null) {
	throw new IllegalArgumentException("Argument map to putAll() " +
					   "contains a null key");
      }
      put(k,e.getValue());
    }
  }
