* keys, using Radke's quadradic residue linear probing instead of
* buckets to minimize object count (less allocations, faster GC).
* See C. Radke, Communications of the ACM, 1970, 103-105
+ *
+ * Not threadsafe.
*/
public class Hash {
-
/** this object is inserted as key in a slot when the
* corresponding value is removed -- this ensures that the
* probing sequence for any given key remains the same even if
/** returns all the primary keys in the table */
public Enumeration keys() {
- // FIXME!!!
- return null;
+ return new HashEnum(this);
}
public Hash() { this(25, 3); }
vals[dest] = v;
}
+ class HashEnum implements java.util.Enumeration {
+ private final Hash parent;
+ private int iterator = 0;
+ private int found = 0;
+
+ public HashEnum (Hash parent) { this.parent = parent; }
+
+ public boolean hasMoreElements() {
+ return found < parent.usedslots;
+ }
+
+ public Object nextElement() {
+ if (!hasMoreElements()) throw new java.util.NoSuchElementException();
+
+ Object o = null;
+ while (o == null) {
+ o = parent.keys1[iterator++];
+ }
+
+ if (o == null) throw new IllegalStateException("Didn't find an element, when I should have.");
+ found++;
+
+ return o;
+ }
+ }
}