package DataStructures.HashMap.Hashing;import java.util.*;/*** This class is an implementation of a hash table using linear probing It uses a dynamic array to* lengthen the size of the hash table when load factor > .7*/public class HashMapLinearProbing {private int hsize; // size of the hash tableprivate Integer[] buckets; // array representing the tableprivate Integer AVAILABLE;private int size; // amount of elements in the hash table/*** Constructor initializes buckets array, hsize, and creates dummy object for AVAILABLE** @param hsize the desired size of the hash map*/public HashMapLinearProbing(int hsize) {this.buckets = new Integer[hsize];this.hsize = hsize;this.AVAILABLE = Integer.MIN_VALUE;this.size = 0;}/*** The Hash Function takes a given key and finds an index based on its data** @param key the desired key to be converted* @return int an index corresponding to the key*/public int hashing(int key) {int hash = key % hsize;if (hash < 0) {hash += hsize;}return hash;}/*** inserts the key into the hash map by wrapping it as an Integer object** @param key the desired key to be inserted in the hash map*/public void insertHash(int key) {Integer wrappedInt = key;int hash = hashing(key);if (isFull()) {System.out.println("Hash table is full");return;}for (int i = 0; i < hsize; i++) {if (buckets[hash] == null || buckets[hash] == AVAILABLE) {buckets[hash] = wrappedInt;size++;return;}if (hash + 1 < hsize) {hash++;} else {hash = 0;}}}/*** deletes a key from the hash map and adds an available placeholder** @param key the desired key to be deleted*/public void deleteHash(int key) {Integer wrappedInt = key;int hash = hashing(key);if (isEmpty()) {System.out.println("Table is empty");return;}for (int i = 0; i < hsize; i++) {if (buckets[hash] != null && buckets[hash].equals(wrappedInt)) {buckets[hash] = AVAILABLE;size--;return;}if (hash + 1 < hsize) {hash++;} else {hash = 0;}}System.out.println("Key " + key + " not found");}/** Displays the hash table line by line */public void displayHashtable() {for (int i = 0; i < hsize; i++) {if (buckets[i] == null || buckets[i] == AVAILABLE) {System.out.println("Bucket " + i + ": Empty");} else {System.out.println("Bucket " + i + ": " + buckets[i].toString());}}}/*** Finds the index of location based on an inputed key** @param key the desired key to be found* @return int the index where the key is located*/public int findHash(int key) {Integer wrappedInt = key;int hash = hashing(key);if (isEmpty()) {System.out.println("Table is empty");return -1;}for (int i = 0; i < hsize; i++) {try {if (buckets[hash].equals(wrappedInt)) {buckets[hash] = AVAILABLE;return hash;}} catch (Exception E) {}if (hash + 1 < hsize) {hash++;} else {hash = 0;}}System.out.println("Key " + key + " not found");return -1;}private void lengthenTable() {buckets = Arrays.copyOf(buckets, hsize * 2);hsize *= 2;System.out.println("Table size is now: " + hsize);}/*** Checks the load factor of the hash table if greater than .7, automatically lengthens table to* prevent further collisions*/public void checkLoadFactor() {double factor = (double) size / hsize;if (factor > .7) {System.out.println("Load factor is " + factor + ", lengthening table");lengthenTable();} else {System.out.println("Load factor is " + factor);}}/*** isFull returns true if the hash map is full and false if not full** @return boolean is Empty*/public boolean isFull() {boolean response = true;for (int i = 0; i < hsize; i++) {if (buckets[i] == null || buckets[i] == AVAILABLE) {response = false;break;}}return response;}/*** isEmpty returns true if the hash map is empty and false if not empty** @return boolean is Empty*/public boolean isEmpty() {boolean response = true;for (int i = 0; i < hsize; i++) {if (buckets[i] != null) {response = false;break;}}return response;}}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。