/** * Removes a point from given bucket. * * @param bucket the bucket number. * @param point the index of point. * @return true if the point was in the bucket. */ boolean remove(int bucket, int point) { for (BucketEntry b : entry) { if (b.bucket == bucket) { return b.remove(point); } } return false; }
public long get(int key) { int bucket = indexFor(key, _buckets.length); for (BucketEntry e = _buckets[bucket]; e != null; e = e.next) { if (key == e.key) { e.recordAccess(this); return e.value; } } return -1; }
/** * Adds a point to given bucket. * * @param bucket the bucket number. * @param point the index of point. */ void add(int bucket, int point) { for (BucketEntry b : entry) { if (b.bucket == bucket) { b.add(point); return; } } BucketEntry b = new BucketEntry(bucket); b.add(point); entry.add(b); }
public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException { this.key = in.readInt(); this.value = in.readLong(); boolean hasNext = in.readBoolean(); BucketEntry cur = this; while (hasNext) { int k = in.readInt(); long v = in.readLong(); BucketEntry n = new BucketEntry(k, v); cur.next = n; cur = n; hasNext = in.readBoolean(); } }
private void rehash(BucketEntry[] newTable) { int oldsize = _buckets.length; int newsize = newTable.length; for (int i = 0; i < oldsize; i++) { BucketEntry oldEntry = _buckets[i]; while (oldEntry != null) { BucketEntry e = oldEntry; oldEntry = oldEntry.next; int bucket = indexFor(e.key, newsize); e.next = newTable[bucket]; newTable[bucket] = e; } } }
/** * Put an entry for the given key number. If one already exists, old value is replaced. * * @return old value for the given key. if not found, return -1. */ public long put(int key, long value) { assert (value != -1L); int bucket = indexFor(key, _buckets.length); // find an entry BucketEntry e; for (e = _buckets[bucket]; e != null; e = e.next) { if (key == e.key) { long replaced = e.value; e.value = value; e.recordAccess(this); return replaced; // found } } // if not found, create a new entry. addEntry(bucket, key, value, _buckets[bucket]); return -1L; }
public long remove(int key) { final int bucket = indexFor(key, _buckets.length); // find an entry BucketEntry e, prev = null; for (e = _buckets[bucket]; e != null; prev = e, e = e.next) { if (key == e.key) { if (prev != null) { prev.next = e.next; } else { _buckets[bucket] = e.next; } --_size; e.recordRemoval(this); return e.value; } } return -1; }