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

1 Expert Approved Answer
Step: 1 Unlock blur-text-image
Question Has Been Solved by an Expert!

Get step-by-step solutions from verified subject matter experts

Step: 2 Unlock
Step: 3 Unlock

Students Have Also Explored These Related Databases Questions!