Search

Java - Data Structures - Creating HashMap using array and LinkedLists

Collision Resolved by Using Changing Technique

 

package datastructures.linear;

import java.util.LinkedList;

public class HashMapFromArray {
public static void main(String[] args) {
HashMapArray obj = new HashMapArray();

obj.put(0, "Data 1");
obj.put(3,"Data 3");
obj.put(13,"Data 13");
obj.put(23,"Data 23");
obj.put(43,"Data 43");
obj.put(2352,"Data 2352");
obj.put(972,"Data 972");

obj.get(0);
obj.get(3);
obj.get(13);
obj.remove(3);
obj.get(3);
obj.get(13);
obj.get(2352);

//obj.display();
}
}

class HashMapArray {
private LinkedList<Entry>[] hashmap = new LinkedList[10];

public void put(int key, String value) {
var newKey = getHash(key);

//If there are no data in the index,initiate new list
if (null == hashmap[newKey])
hashmap[newKey] = new LinkedList<Entry>();

//If the Item already existing in the list,replace the value
for (var entry: hashmap[newKey])
if(entry.key==key){
entry.value = value;
return;
}

//If item not in the array,add value as a new item
hashmap[newKey].addLast(new Entry(key, value));
}

public void get(int key) {
var newKey = getHash(key);
var currentData = hashmap[newKey];
boolean flag = false;
if (null == currentData)
throw new IllegalArgumentException();
else
for (var dataObj : currentData)
if(dataObj.key==key) {
System.out.println(dataObj.value);
flag = true;
break;
}
System.err.println((!flag)?key+" - Not Fond":"");
}

public void remove(int key){
var newKey = getHash(key);
var currentData = hashmap[newKey];
boolean flag = false;
if (null == currentData)
throw new IllegalArgumentException();
else
for (var dataObj : currentData)
if(dataObj.key==key) {
currentData.remove(dataObj);
System.out.println("Done");
flag = true;
break;
}
System.err.println((!flag)?"Error":"");
}

private int getHash(int key) {
return (key >= hashmap.length) ? key % hashmap.length : key;
}

public void display() {
System.out.println(hashmap);
}

private class Entry {
private int key;
private String value;

Entry(int key, String value) {
this.key = key;
this.value = value;
}
}
}

 GitHub Url

No comments:

Post a Comment

Java Interfaces vs. Abstract class

Summary of the similarities and differences between the Interfaces and Abstract class Abstract class Interface Has a constructor Yes No An i...