1+ package DataStructures .HashMap .Hashing ;
2+
3+ /**
4+ * This class is an implementation of a hash table using linear probing
5+ *
6+ */
7+ class HashMapLinearProbing {
8+ private int hsize ;
9+ private Integer [] buckets ;
10+ private Integer AVAILABLE ;
11+
12+ /**
13+ * Constructor initializes buckets array, hsize, and creates dummy object for AVAILABLE
14+ * @param hsize the desired size of the hash map
15+ */
16+ public HashMapLinearProbing (int hsize ) {
17+ buckets = new Integer [hsize ];
18+ this .hsize = hsize ;
19+ AVAILABLE = new Integer (Integer .MIN_VALUE );
20+ }
21+
22+ /**
23+ * The Hash Function takes a given key and finds an index based on its data
24+ * @param key the desired key to be converted
25+ * @return int an index corresponding to the key
26+ */
27+ public int hashing (int key ) {
28+ int hash = key % hsize ;
29+ if (hash < 0 ) {
30+ hash += hsize ;
31+ }
32+ return hash ;
33+ }
34+
35+ /**
36+ * inserts the key into the hash map by wrapping it as an Integer object
37+ * @param key the desired key to be inserted in the hash map
38+ */
39+ public void insertHash (int key ) {
40+ Integer wrappedInt = new Integer (key );
41+ int hash = hashing (key );
42+
43+ if (isFull ()) {
44+ System .out .println ("Hash table is full" );
45+ return ;
46+ }
47+
48+ for (int i = 0 ;i < hsize ; i ++) {
49+ if (buckets [hash ] == null || buckets [hash ] == AVAILABLE ) {
50+ buckets [hash ] = wrappedInt ;
51+ return ;
52+ }
53+
54+ if (hash + 1 < hsize ) {
55+ hash ++;
56+ } else {
57+ hash = 0 ;
58+ }
59+ }
60+ }
61+
62+ /**
63+ * deletes a key from the hash map and adds an available placeholder
64+ * @param key the desired key to be deleted
65+ */
66+ public void deleteHash (int key ) {
67+ Integer wrappedInt = new Integer (key );
68+ int hash = hashing (key );
69+
70+ if (isEmpty ()) {
71+ System .out .println ("Table is empty" );
72+ return ;
73+ }
74+
75+ for (int i = 0 ;i < hsize ; i ++) {
76+ if (buckets [hash ] != null && buckets [hash ].equals (wrappedInt )) {
77+ buckets [hash ] = AVAILABLE ;
78+ return ;
79+ }
80+
81+ if (hash + 1 < hsize ) {
82+ hash ++;
83+ } else {
84+ hash = 0 ;
85+ }
86+ }
87+ System .out .println ("Key " + key + " not found" );
88+ }
89+
90+ /**
91+ * Displays the hash table line by line
92+ */
93+ public void displayHashtable () {
94+ for (int i = 0 ; i < hsize ; i ++) {
95+ if (buckets [i ] == null || buckets [i ] == AVAILABLE ) {
96+ System .out .println ("Bucket " + i + ": Empty" );
97+ } else {
98+ System .out .println ("Bucket " + i + ": " + buckets [i ].toString ());
99+ }
100+
101+ }
102+ }
103+
104+ /**
105+ * Finds the index of location based on an inputed key
106+ * @param key the desired key to be found
107+ * @return int the index where the key is located
108+ */
109+ public int findHash (int key ) {
110+ Integer wrappedInt = new Integer (key );
111+ int hash = hashing (key );
112+
113+ if (isEmpty ()) {
114+ System .out .println ("Table is empty" );
115+ return -1 ;
116+ }
117+
118+ for (int i = 0 ;i < hsize ; i ++) {
119+ if (buckets [hash ].equals (wrappedInt )) {
120+ buckets [hash ] = AVAILABLE ;
121+ return hash ;
122+ }
123+
124+ if (hash + 1 < hsize ) {
125+ hash ++;
126+ } else {
127+ hash = 0 ;
128+ }
129+ }
130+ System .out .println ("Key " + key + " not found" );
131+ return -1 ;
132+ }
133+
134+ /**
135+ * isFull returns true if the hash map is full and false if not full
136+ * @return boolean is Empty
137+ */
138+ public boolean isFull () {
139+ boolean response = true ;
140+ for (int i = 0 ; i < hsize ;i ++) {
141+ if (buckets [i ] == null || buckets [i ] == AVAILABLE ) {
142+ response = false ;
143+ break ;
144+ }
145+ }
146+ return response ;
147+ }
148+
149+ /**
150+ * isEmpty returns true if the hash map is empty and false if not empty
151+ * @return boolean is Empty
152+ */
153+ public boolean isEmpty () {
154+ boolean response = true ;
155+ for (int i = 0 ; i < hsize ;i ++) {
156+ if (buckets [i ] != null ) {
157+ response = false ;
158+ break ;
159+ }
160+ }
161+ return response ;
162+ }
163+ }
0 commit comments