Example #1
0
  private void readObject(ObjectInputStream stream) throws IOException, ClassNotFoundException {
    stream.defaultReadObject();
    int capacity = stream.readInt();
    if (capacity < 0) {
      throw new InvalidObjectException("Capacity: " + capacity);
    }
    if (capacity < MINIMUM_CAPACITY) {
      capacity = MINIMUM_CAPACITY;
    } else if (capacity > MAXIMUM_CAPACITY) {
      capacity = MAXIMUM_CAPACITY;
    } else {
      capacity = roundUpToPowerOfTwo(capacity);
    }
    makeTable(capacity);

    int size = stream.readInt();
    if (size < 0) {
      throw new InvalidObjectException("Size: " + size);
    }

    for (int i = 0; i < size; i++) {
      @SuppressWarnings("unchecked")
      K key = (K) stream.readObject();
      @SuppressWarnings("unchecked")
      V val = (V) stream.readObject();
      constructorPut(key, val);
    }
  }
Example #2
0
  /**
   * Constructs a new {@code Hashtable} using the specified capacity and the default load factor.
   *
   * @param capacity the initial capacity.
   */
  public Hashtable(int capacity) {
    if (capacity < 0) {
      throw new IllegalArgumentException("Capacity: " + capacity);
    }

    if (capacity == 0) {
      @SuppressWarnings("unchecked")
      HashtableEntry<K, V>[] tab = (HashtableEntry<K, V>[]) EMPTY_TABLE;
      table = tab;
      threshold = -1; // Forces first put() to replace EMPTY_TABLE
      return;
    }

    if (capacity < MINIMUM_CAPACITY) {
      capacity = MINIMUM_CAPACITY;
    } else if (capacity > MAXIMUM_CAPACITY) {
      capacity = MAXIMUM_CAPACITY;
    } else {
      capacity = roundUpToPowerOfTwo(capacity);
    }
    makeTable(capacity);
  }
Example #3
0
  /**
   * Returns a new {@code Hashtable} with the same key/value pairs, capacity and load factor.
   *
   * @return a shallow copy of this {@code Hashtable}.
   * @see java.lang.Cloneable
   */
  @SuppressWarnings("unchecked")
  @Override
  public synchronized Object clone() {
    /*
     * This could be made more efficient. It unnecessarily hashes all of
     * the elements in the map.
     */
    Hashtable<K, V> result;
    try {
      result = (Hashtable<K, V>) super.clone();
    } catch (CloneNotSupportedException e) {
      throw new AssertionError(e);
    }

    // Restore clone to empty state, retaining our capacity and threshold
    result.makeTable(table.length);
    result.size = 0;
    result.keySet = null;
    result.entrySet = null;
    result.values = null;

    result.constructorPutAll(this);
    return result;
  }