Introduction to Java Programming and Data Structures, Comprehensive Version (11th Edition)
Introduction to Java Programming and Data Structures, Comprehensive Version (11th Edition)
11th Edition
ISBN: 9780134670942
Author: Y. Daniel Liang
Publisher: PEARSON
bartleby

Concept explainers

Question
Book Icon
Chapter 27, Problem 27.1PE
Program Plan Intro

MyMap using Open Addressing with Linear Probing

Program Plan:

  • Define a class named “Sample” to implement MyMap using open addressing with linear probing.
    • Define function main.
      • Define an integer HashMap named “map”.
      • Put ‘2, 2” into the map.
      • Remove “2” from the map.
    • Define a static class named “MyHashMap” and implement “MyMap”.
      • Define required variables.
      • Define a function named “MyHashMap”.
        • Construct a map with the default capacity and load factor.
      • Define a function named “MyHashMap” with one parameter.
        • Construct a map with the specific initial capacity and default load factor.
      • Define a function named “MyHashMap” with two parameters.
        • Construct a map with the default capacity and load factor.
      • Define a function named “clear”.
        • Remove all of the entries from this map.
      • Define a function named “containsKey”.
        • Return true if the specified key is in the map.
      • Define a function named “containsValue”.
        • Return true if this map contains the specific value.
      • Define a function named “entrySet”.
        • Return a set of entries in the map.
      • Define a function named “get”.
        • Return the first value that matches the specific key.
      • Define a function named “getAll”.
        • Return all values for the specified key in this map.
      • Define a function named “isEmpty”.
        • Return true if this map contains no entries.
      • Define a function named “keyset”.
        • Return a set consisting of the keys in this map.
      • Define a function named “put”.
        • Add an entry (key, value) into the map and return the value.
      • Define a function named “remove”.
        • Remove the element for the specific key.
      • Define a function named “size”.
        • Return the number of mappings in this map.
      • Define a function named “values”.
        • Return a set consisting of the values in this map.
      • Define a function named “hash”.
        • Return “hashCode % capacity” value.
      • Define a function named “supplmentHash”.
        • Ensure the hashing is evenly distributed and return the result.
      • Define a function named “removeEntries”.
        • Remove all entries from each bucket.
      • Define a function named “rehash”.
        • Rehash this map.
      • Define a function named “toString”.
        • Return a string representing for this map.
    • Define an interface name “MyMap”.
      • Declare function prototypes for the functions which are created at the class “MyHashMap”.

Expert Solution & Answer
Check Mark
Program Description Answer

The below program creates a new concrete class that implements MyMap using open addressing with linear probing, whose hash table size is 4 and the table size get doubled when the load factor exceeds the threshold 0.5.

Explanation of Solution

Program:

public class Sample {

/** Main method */

public static void main(String[] args) {

MyHashMap<Integer, Integer> map = new MyHashMap<>();

map.put(2, 2);

System.out.println("Is key 2 in the map? " + map.containsKey(2));

map.remove(2);

System.out.println("Is key 2 in the map? " + map.containsKey(2));

}

static class MyHashMap<K, V> implements MyMap<K, V> {

// Define the default hash table size.

private static int INITIAL_CAPACITY = 4;

// Define the maximum hash table size. 1 << 30 is same as 2^30

private static int MAX_CAPACITY = 1 << 30;

// Current hash table capacity.

private int capacity;

// Define default load factor

private static float MAX_LOAD_FACTOR = 0.5f;

// Specify a load factor used in the hash table

private float loadFactorThreshold;

// The number of entries in the map

private int size = 0;

// Hash table is an array with each cell that is a linked list

MyMap.Entry<K, V>[] table;

/** Construct a map with the default capacity and load factor */

public MyHashMap() {

this(INITIAL_CAPACITY, MAX_LOAD_FACTOR);

}

/**

* Construct a map with the specified initial capacity and default load

* factor

*/

public MyHashMap(int initialCapacity) {

this(initialCapacity, MAX_LOAD_FACTOR);

}

/**

* Construct a map with the specified initial capacity and load factor

*/

public MyHashMap(int initialCapacity, float loadFactorThreshold) {

this.capacity = initialCapacity;

this.loadFactorThreshold = loadFactorThreshold;

table = new MyMap.Entry[capacity];

}

/** Remove all of the entries from this map */

public void clear() {

size = 0;

removeEntries();

}

/** Return true if the specified key is in the map */

public boolean containsKey(K key) {

if (get(key) != null)

return true;

else

return false;

}

/** Return true if this map contains the specified value */

public boolean containsValue(V value) {

for (int i = 0; i < table.length; i++)

if (table[i] != null && table[i].value.equals(value))

return true;

return false;

}

/** Return a set of entries in the map */

public java.util.Set<MyMap.Entry<K, V>> entrySet() {

java.util.Set<MyMap.Entry<K, V>> set = new java.util.HashSet<MyMap.Entry<K, V>>();

for (int i = 0; i < capacity; i++)

if (table[i] != null)

set.add(table[i]);

return set;

}

/** Return the first value that matches the specified key */

public V get(K key) {

// Perform linear probing

int i = hash(key.hashCode());

while (table[i] != null) {

if (table[i].key != null && table[i].key.equals(key))

return table[i].value;

i = (i + 1) % table.length;

}

return null;

}

/** Return all values for the specified key in this map */

public java.util.Set<V> getAll(K key) {

java.util.Set<V> set = new java.util.HashSet<V>();

for (int i = 0; i < capacity; i++)

if (table[i] != null && table[i].key.equals(key))

set.add(table[i].value);

return set;

}

/** Return true if this map contains no entries */

public boolean isEmpty() {

return size == 0;

}

/** Return a set consisting of the keys in this map */

public java.util.Set<K> keySet() {

java.util.Set<K> set = new java.util.HashSet<K>();

for (int i = 0; i < capacity; i++)

if (table[i] != null)

set.add(table[i].key);

return set;

}

/** Add an entry (key, value) into the map */

public V put(K key, V value) {

if (size >= capacity * loadFactorThreshold) {

if (capacity == MAX_CAPACITY)

throw new RuntimeException("Exceeding maximum capacity");

rehash();

}

int i = hash(key.hashCode());

while (table[i] != null && table[i].key != null)

i = (i + 1) % table.length;

// Add an entry (key, value) to the table

table[i] = new MyMap.Entry<K, V>(key, value);

size++; // Increase size

return value;

}

/** Remove the element for the specified key */

public void remove(K key) {

int i = hash(key.hashCode());

while (table[i] != null

&& (table[i].key == null || !table[i].key.equals(key)))

i = (i + 1) % table.length;

if (table[i] != null && table[i].key.equals(key)) {

// A special marker Entry(null, null) is placed for the deleted

// entry

table[i] = new MyMap.Entry<K, V>(null, null);

size--;

}

}

/** Return the number of mappings in this map */

public int size() {

return size;

}

/** Return a set consisting of the values in this map */

public java.util.Set<V> values() {

java.util.Set<V> set = new java.util.HashSet<V>();

for (int i = 0; i < capacity; i++)

if (table[i] != null)

set.add(table[i].value);

return set;

}

/** Hash function */

private int hash(int hashCode) {

return hashCode % capacity;

// return supplementHash(hashCode) & (capacity - 1);

}

/** Ensure the hashing is evenly distributed */

private static int supplementHash(int h) {

h ^= (h >>> 20) ^ (h >>> 12);

return h ^ (h >>> 7) ^ (h >>> 4);

}

/** Remove all entries from each bucket */

private void removeEntries() {

for (int i = 0; i < capacity; i++)

table[i] = null;

}

/** Rehash the map */

private void rehash() {

java.util.Set<Entry<K, V>> set = entrySet(); // Get entries

capacity <<= 1; // Double capacity

table = new Entry[capacity]; // Create a new hash table

size = 0; // Clear size

for (Entry<K, V> entry : set) {

put(entry.getKey(), entry.getValue()); // Store to new table

}

}

@Override

/** Return a string representation for this map */

public String toString() {

StringBuilder builder = new StringBuilder("[");

for (int i = 0; i < capacity; i++) {

if (table[i] != null && table[i].key != null)

builder.append(table[i].toString());

}

return builder.append("]").toString();

}

}

interface MyMap<K, V> {

/** Remove all of the entries from this map */

public void clear();

/** Return true if the specified key is in the map */

public boolean containsKey(K key);

/** Return true if this map contains the specified value */

public boolean containsValue(V value);

/** Return a set of entries in the map */

public java.util.Set<Entry<K, V>> entrySet();

/** Return the first value that matches the specified key */

public V get(K key);

/** Return all values for the specified key in this map */

public java.util.Set<V> getAll(K key);

/** Return true if this map contains no entries */

public boolean isEmpty();

/** Return a set consisting of the keys in this map */

public java.util.Set<K> keySet();

/** Add an entry (key, value) into the map */

public V put(K key, V value);

/** Remove the entries for the specified key */

public void remove(K key);

/** Return the number of mappings in this map */

public int size();

/** Return a set consisting of the values in this map */

public java.util.Set<V> values();

/** Define inner class for Entry */

public static class Entry<K, V> {

K key;

V value;

public Entry(K key, V value) {

this.key = key;

this.value = value;

}

public K getKey() {

return key;

}

public V getValue() {

return value;

}

@Override

public String toString() {

return "[" + key + ", " + value + "]";

}

}

}

}

Sample Output

Is key 2 in the map? true

Is key 2 in the map? false

Want to see more full solutions like this?

Subscribe now to access step-by-step solutions to millions of textbook problems written by subject matter experts!
Students have asked these similar questions
can you please type the codeto the following question
I need help urgently to be able to understand how to do this program it is written in C++ but I am currently lost as to how I should start or do it or what is it even asking I would highly appreciate any good help
(Implement set operations in MyList)(JAVA) Please use class name: Exercise_01 The implementations of the methods addAll, removeAll, retainAll, toArray(), and toArray(T[]) are omitted in the MyList interface. Implement these methods. Test your new MyList class using the code at https://liveexample.pearsoncmg.com/test/Exercise24_01.txt. Sample Output: Enter five strings for array name1 separated by space: TomGeorgePeterJeanJaneEnter five strings for array name2 separated by space: TomGeorgeMichaelMichelleDanielEnter two strings for array name3 separated by space: TomPeterlist1:[Tom, George, Peter, Jean, Jane]list2:[Tom, George, Michael, Michelle, Daniel]After addAll:[Tom, George, Peter, Jean, Jane, Tom, George, Michael, Michelle, Daniel] list1:[Tom, George, Peter, Jean, Jane]list2:[Tom, George, Michael, Michelle, Daniel]After removeAll:[Peter, Jean, Jane] list1:[Tom, George, Peter, Jean, Jane]list2:[Tom, George, Michael, Michelle, Daniel]After retainAll:[Tom, George] list1:[Tom, George,…
Knowledge Booster
Background pattern image
Computer Science
Learn more about
Need a deep-dive on the concept behind this application? Look no further. Learn more about this topic, computer-science and related others by exploring similar questions and additional content below.
Similar questions
SEE MORE QUESTIONS
Recommended textbooks for you
Text book image
Database System Concepts
Computer Science
ISBN:9780078022159
Author:Abraham Silberschatz Professor, Henry F. Korth, S. Sudarshan
Publisher:McGraw-Hill Education
Text book image
Starting Out with Python (4th Edition)
Computer Science
ISBN:9780134444321
Author:Tony Gaddis
Publisher:PEARSON
Text book image
Digital Fundamentals (11th Edition)
Computer Science
ISBN:9780132737968
Author:Thomas L. Floyd
Publisher:PEARSON
Text book image
C How to Program (8th Edition)
Computer Science
ISBN:9780133976892
Author:Paul J. Deitel, Harvey Deitel
Publisher:PEARSON
Text book image
Database Systems: Design, Implementation, & Manag...
Computer Science
ISBN:9781337627900
Author:Carlos Coronel, Steven Morris
Publisher:Cengage Learning
Text book image
Programmable Logic Controllers
Computer Science
ISBN:9780073373843
Author:Frank D. Petruzella
Publisher:McGraw-Hill Education