Question: Finish the has and hasNext methods They are bold // HashTable.java - code for hashing assignment import java.util.*; public class HashTable implements IHash { //
Finish the has and hasNext methods They are bold
// HashTable.java - code for hashing assignment
import java.util.*;
public class HashTable implements IHash {
// Method of hashing
HashFunction hasher;
// Hash table : an ArrayList of "buckets", which store the actual strings
ArrayList> hashTable;
/**
* Number of Elements
*/
int numberOfElements;
int size;
/**
* Initializes a new instance of HashTable.
*
* Initialize the instance variables.
* Note: when initializing the hashTable, make sure to allocate each entry in the HashTable
* to a new a HashBucket or null, your choice.
* @param size the size of the hashTable
* @param hasher the type of hashing function
*/
public HashTable(int size, HashFunction hasher) {
// YOUR CODE HERE
this.hasher = hasher;
this.size = size;
this.numberOfElements = 0;
for(int i = 0; i < size; i++) {
//hashTable.add(new LinkedList());
hashTable.add(new ArrayList());
}
}
public boolean insert(String key) {
// YOUR CODE HERE
int i = hasher.hash(key) % size;
if(hashTable.get(i).contains(key)) {
return false;
}
else{
hashTable.get(i).add(key);
numberOfElements++;
return true;
}
}
public boolean remove(String key) {
// YOUR CODE HERE
int i = hasher.hash(key) % size;
if(hashTable.get(i).contains(key)) {
hashTable.get(i).remove(key);
numberOfElements--;
return true;
}
else {
return false;
}
}
public String search(String key) {
// YOUR CODE HERE
int i = hasher.hash(key) % size;
if(hashTable.get(i).contains(key)) {
return hashTable.get(i).toString();
}
else {
return null;
}
}
public int size() {
// YOUR CODE HERE
int currentSize = 0;
for(int i = 0; i < hashTable.size(); i++) {
currentSize += size(i);
}
return currentSize;
}
public int size(int index) {
// YOUR CODE HERE
return hashTable.get(index).size();
}
// Return iterator for the entire hashTable,
// must iterate all hashBuckets that are not empty
public class HashIterator implements Iterator {
// The current index into the hashTable
private int currentIndex;
// The current iterator for that hashBucket
private Iterator currentIterator = null;
HashIterator() {
// YOUR CODE HERE
this.currentIndex = 0;
currentIterator = hashTable.get(currentIndex).iterator();
}
public String next() {
// YOUR CODE HERE
}
public boolean hasNext() {
// YOUR CODE HERE
}
}
// Return an iterator for the hash table
public Iterator iterator() {
// YOUR CODE HERE
return new HashIterator();
}
/**
* Does not use the iterator above. Iterates over one bucket.
*
* @param index the index of bucket to iterate over
* @return an iterator for that bucket
*/
public Iterator iterator(int index) {
List bucket = hashTable.get(index);
return bucket != null ? bucket.iterator() : null;
}
// Prints entire hash table.
// NOTE: This method is used extensively for testing.
public void print() {
Debug.printf("HashTable size: " + size());
for (int index = 0; index < hashTable.size(); index++) {
List list = hashTable.get(index);
if (list != null) {
Debug.printf("HashTable[%d]: %d entries", index, list.size());
for (String word : list) {
Debug.printf("String: %s (hash code %d)", word, hasher.hash(word));
}
}else {
Debug.printf("HashTable[%d]: %d entries", index, 0);
}
}
}
}
---------------------------------------------------------------
@FunctionalInterface
interface HashFunction {
int hash(String key);
}
public class Hasher {
// Hashing algorithms, see specification
/**
* Hashing algorithms, see provided documentation in assignment
* @param hashFunction FIRST, SUM, PRIME, OR JAVA
* @return the corresponding HashFunction
*/
public static HashFunction make(String hashFunction) {
switch (hashFunction) {
case "FIRST":
// YOUR CODE HERE
return new HashFunction() {
@Override
public int hash(String key) {
// TODO Auto-generated method stub
return key.charAt(0);
}
};
case "SUM":
// YOUR CODE HERE
return new HashFunction() {
@Override
public int hash(String key) {
// TODO Auto-generated method stub
int sum = 0;
for(int i = 0;i < key.length(); i++){
sum += key.charAt(i);
}
return Math.abs(sum);
}
};
case "PRIME":
// YOUR CODE HERE
return new HashFunction() {
@Override
public int hash(String key) {
// TODO Auto-generated method stub
int hashCode = 7;
for(int i = 0;i < key.length(); i++){
hashCode*=31;
hashCode+=key.charAt(i);
}
return Math.abs(hashCode);
}
};
case "JAVA":
// YOUR CODE HERE
return new HashFunction() {
@Override
public int hash(String key) {
// TODO Auto-generated method stub
return key.hashCode();
}
};
default:
usage();
}
return null;
}
// Usage message
private static void usage() {
System.err.println("Usage: java Hasher
System.exit(1);
}
// Test code for hasher
public static void main(String[] args) {
args = Debug.init(args);
if (args.length != 2)
usage();
HashFunction sh = make(args[0]);
int hashCode = sh != null ? sh.hash(args[1]) : 0;
System.out.printf("'%s' hashes to %d using %s ", args[1], hashCode, args[0]);
}
}
Step by Step Solution
There are 3 Steps involved in it
Get step-by-step solutions from verified subject matter experts
