home *** CD-ROM | disk | FTP | other *** search
- package java.util;
-
- import java.io.IOException;
- import java.io.ObjectInputStream;
- import java.io.ObjectOutputStream;
- import java.io.Serializable;
-
- public class Hashtable extends Dictionary implements Map, Cloneable, Serializable {
- private transient Entry[] table;
- private transient int count;
- private int threshold;
- private float loadFactor;
- private transient int modCount;
- private static final long serialVersionUID = 1421746759512286392L;
- private transient Set keySet;
- private transient Set entrySet;
- private transient Collection values;
- private static final int KEYS = 0;
- private static final int VALUES = 1;
- private static final int ENTRIES = 2;
- private static EmptyEnumerator emptyEnumerator = new EmptyEnumerator();
- private static EmptyIterator emptyIterator = new EmptyIterator();
-
- public Hashtable(int var1, float var2) {
- this.modCount = 0;
- this.keySet = null;
- this.entrySet = null;
- this.values = null;
- if (var1 < 0) {
- throw new IllegalArgumentException("Illegal Capacity: " + var1);
- } else if (!(var2 <= 0.0F) && !Float.isNaN(var2)) {
- if (var1 == 0) {
- var1 = 1;
- }
-
- this.loadFactor = var2;
- this.table = new Entry[var1];
- this.threshold = (int)((float)var1 * var2);
- } else {
- throw new IllegalArgumentException("Illegal Load: " + var2);
- }
- }
-
- public Hashtable(int var1) {
- this(var1, 0.75F);
- }
-
- public Hashtable() {
- this(11, 0.75F);
- }
-
- public Hashtable(Map var1) {
- this(Math.max(2 * var1.size(), 11), 0.75F);
- this.putAll(var1);
- }
-
- public int size() {
- return this.count;
- }
-
- public boolean isEmpty() {
- return this.count == 0;
- }
-
- public synchronized Enumeration keys() {
- return this.getEnumeration(0);
- }
-
- public synchronized Enumeration elements() {
- return this.getEnumeration(1);
- }
-
- public synchronized boolean contains(Object var1) {
- if (var1 == null) {
- throw new NullPointerException();
- } else {
- Entry[] var2 = this.table;
- int var3 = var2.length;
-
- while(var3-- > 0) {
- for(Entry var4 = var2[var3]; var4 != null; var4 = var4.next) {
- if (var4.value.equals(var1)) {
- return true;
- }
- }
- }
-
- return false;
- }
- }
-
- public boolean containsValue(Object var1) {
- return this.contains(var1);
- }
-
- public synchronized boolean containsKey(Object var1) {
- Entry[] var2 = this.table;
- int var3 = var1.hashCode();
- int var4 = (var3 & Integer.MAX_VALUE) % var2.length;
-
- for(Entry var5 = var2[var4]; var5 != null; var5 = var5.next) {
- if (var5.hash == var3 && var5.key.equals(var1)) {
- return true;
- }
- }
-
- return false;
- }
-
- public synchronized Object get(Object var1) {
- Entry[] var2 = this.table;
- int var3 = var1.hashCode();
- int var4 = (var3 & Integer.MAX_VALUE) % var2.length;
-
- for(Entry var5 = var2[var4]; var5 != null; var5 = var5.next) {
- if (var5.hash == var3 && var5.key.equals(var1)) {
- return var5.value;
- }
- }
-
- return null;
- }
-
- protected void rehash() {
- int var1 = this.table.length;
- Entry[] var2 = this.table;
- int var3 = var1 * 2 + 1;
- Entry[] var4 = new Entry[var3];
- ++this.modCount;
- this.threshold = (int)((float)var3 * this.loadFactor);
- this.table = var4;
- int var5 = var1;
-
- Entry var7;
- int var8;
- while(var5-- > 0) {
- for(Entry var6 = var2[var5]; var6 != null; var4[var8] = var7) {
- var7 = var6;
- var6 = var6.next;
- var8 = (var7.hash & Integer.MAX_VALUE) % var3;
- var7.next = var4[var8];
- }
- }
-
- }
-
- public synchronized Object put(Object var1, Object var2) {
- if (var2 == null) {
- throw new NullPointerException();
- } else {
- Entry[] var3 = this.table;
- int var4 = var1.hashCode();
- int var5 = (var4 & Integer.MAX_VALUE) % var3.length;
-
- for(Entry var6 = var3[var5]; var6 != null; var6 = var6.next) {
- if (var6.hash == var4 && var6.key.equals(var1)) {
- Object var7 = var6.value;
- var6.value = var2;
- return var7;
- }
- }
-
- ++this.modCount;
- if (this.count >= this.threshold) {
- this.rehash();
- var3 = this.table;
- var5 = (var4 & Integer.MAX_VALUE) % var3.length;
- }
-
- Entry var8 = new Entry(var4, var1, var2, var3[var5]);
- var3[var5] = var8;
- ++this.count;
- return null;
- }
- }
-
- public synchronized Object remove(Object var1) {
- Entry[] var2 = this.table;
- int var3 = var1.hashCode();
- int var4 = (var3 & Integer.MAX_VALUE) % var2.length;
- Entry var5 = var2[var4];
-
- for(Entry var6 = null; var5 != null; var5 = var5.next) {
- if (var5.hash == var3 && var5.key.equals(var1)) {
- ++this.modCount;
- if (var6 != null) {
- var6.next = var5.next;
- } else {
- var2[var4] = var5.next;
- }
-
- --this.count;
- Object var7 = var5.value;
- var5.value = null;
- return var7;
- }
-
- var6 = var5;
- }
-
- return null;
- }
-
- public synchronized void putAll(Map var1) {
- for(Map.Entry var3 : var1.entrySet()) {
- this.put(var3.getKey(), var3.getValue());
- }
-
- }
-
- public synchronized void clear() {
- Entry[] var1 = this.table;
- ++this.modCount;
- int var2 = var1.length;
-
- while(true) {
- --var2;
- if (var2 < 0) {
- this.count = 0;
- return;
- }
-
- var1[var2] = null;
- }
- }
-
- public synchronized Object clone() {
- try {
- Hashtable var1 = (Hashtable)super.clone();
- var1.table = new Entry[this.table.length];
-
- for(int var2 = this.table.length; var2-- > 0; var1.table[var2] = this.table[var2] != null ? (Entry)this.table[var2].clone() : null) {
- }
-
- var1.keySet = null;
- var1.entrySet = null;
- var1.values = null;
- var1.modCount = 0;
- return var1;
- } catch (CloneNotSupportedException var3) {
- throw new InternalError();
- }
- }
-
- public synchronized String toString() {
- int var1 = this.size() - 1;
- StringBuffer var2 = new StringBuffer();
- Iterator var3 = this.entrySet().iterator();
- var2.append("{");
-
- for(int var4 = 0; var4 <= var1; ++var4) {
- Map.Entry var5 = (Map.Entry)var3.next();
- var2.append(var5.getKey() + "=" + var5.getValue());
- if (var4 < var1) {
- var2.append(", ");
- }
- }
-
- var2.append("}");
- return var2.toString();
- }
-
- private Enumeration getEnumeration(int var1) {
- return (Enumeration)(this.count == 0 ? emptyEnumerator : new Enumerator(this, var1, false));
- }
-
- private Iterator getIterator(int var1) {
- return (Iterator)(this.count == 0 ? emptyIterator : new Enumerator(this, var1, true));
- }
-
- public Set keySet() {
- if (this.keySet == null) {
- this.keySet = Collections.synchronizedSet(new KeySet(this, (1)null), this);
- }
-
- return this.keySet;
- }
-
- public Set entrySet() {
- if (this.entrySet == null) {
- this.entrySet = Collections.synchronizedSet(new EntrySet(this, (1)null), this);
- }
-
- return this.entrySet;
- }
-
- public Collection values() {
- if (this.values == null) {
- this.values = Collections.synchronizedCollection(new ValueCollection(this, (1)null), this);
- }
-
- return this.values;
- }
-
- public synchronized boolean equals(Object var1) {
- if (var1 == this) {
- return true;
- } else if (!(var1 instanceof Map)) {
- return false;
- } else {
- Map var2 = (Map)var1;
- if (var2.size() != this.size()) {
- return false;
- } else {
- for(Map.Entry var4 : this.entrySet()) {
- Object var5 = var4.getKey();
- Object var6 = var4.getValue();
- if (var6 == null) {
- if (var2.get(var5) != null || !var2.containsKey(var5)) {
- return false;
- }
- } else if (!var6.equals(var2.get(var5))) {
- return false;
- }
- }
-
- return true;
- }
- }
- }
-
- public synchronized int hashCode() {
- int var1 = 0;
-
- for(Iterator var2 = this.entrySet().iterator(); var2.hasNext(); var1 += var2.next().hashCode()) {
- }
-
- return var1;
- }
-
- private synchronized void writeObject(ObjectOutputStream var1) throws IOException {
- var1.defaultWriteObject();
- var1.writeInt(this.table.length);
- var1.writeInt(this.count);
-
- for(int var2 = this.table.length - 1; var2 >= 0; --var2) {
- for(Entry var3 = this.table[var2]; var3 != null; var3 = var3.next) {
- var1.writeObject(var3.key);
- var1.writeObject(var3.value);
- }
- }
-
- }
-
- private synchronized void readObject(ObjectInputStream var1) throws IOException, ClassNotFoundException {
- var1.defaultReadObject();
- int var2 = var1.readInt();
- int var3 = var1.readInt();
- int var4 = (int)((float)var3 * this.loadFactor) + var3 / 20 + 3;
- if (var4 > var3 && (var4 & 1) == 0) {
- --var4;
- }
-
- if (var2 > 0 && var4 > var2) {
- var4 = var2;
- }
-
- this.table = new Entry[var4];
-
- for(this.count = 0; var3 > 0; --var3) {
- Object var5 = var1.readObject();
- Object var6 = var1.readObject();
- this.put(var5, var6);
- }
-
- }
-
- // $FF: synthetic method
- static Iterator access$100(Hashtable var0, int var1) {
- return var0.getIterator(var1);
- }
-
- // $FF: synthetic method
- static int access$200(Hashtable var0) {
- return var0.count;
- }
-
- // $FF: synthetic method
- static Entry[] access$400(Hashtable var0) {
- return var0.table;
- }
-
- // $FF: synthetic method
- static int access$508(Hashtable var0) {
- return var0.modCount++;
- }
-
- // $FF: synthetic method
- static int access$210(Hashtable var0) {
- return var0.count--;
- }
-
- // $FF: synthetic method
- static int access$500(Hashtable var0) {
- return var0.modCount;
- }
- }
-