class keyVal
{
{
key=k;
val=v;
}
}
class hashMap
{
keyVal[] hashTable;
public hashMap(int size)
{
hashTable=new keyVal[size];
this.size=size;
for (int i = 0; i < size; i++) {
state[i] = 0;
freq[i] = 0;
}
}
{
return k.hashCode()%size;
}
{
keyVal nn=new keyVal(k,v);
while(state[i]==1)
{
if(hashTable[i].key.equals(k))
{
hashTable[i].val=v;
freq[i]++;
return;
}
i=(i+1)%size;
if(i==home){
return;
}
}
hashTable[i]=nn;
state[i]=1;
freq[i]=1;
}
{
while(state[i]!=0 && !hashTable[i].key.equals(k))
{
i=(i+1)%size;
if(i==home)
{
return false;
}
}
if(state[i]==1 && hashTable[i]!=null && hashTable[i].key.equals(k))
{
freq[i]--;
if(freq[i]==0)
{
state[i]=-1;
hashTable[i]=null;
}
return true;
}
return false;
}
{
int home=hash(k);
int i=home;
while(state[i]!=0)
{
if(hashTable[i]!=null && hashTable[i].key.equals(k))
{
return hashTable[i].val;
}
i=(i+1)%size;
if(i==home)
{
return null;
}
}
return null;
}
public void printHashMap()
{
for(int i=0;i<size;i++)
{
if(state[i]==1)
{
System.
out.
println(hashTable
[i
].
key+" : "+hashTable
[i
].
val); }
}
}
}
public class Main
{
public static void main
(String args
[]) {
hashMap hm=new hashMap(10);
hm.insert(25,1);
hm.insert(36,2);
hm.insert(46,3);
hm.insert(48,4);
hm.insert(49,5);
hm.insert(59,6);
hm.insert(35,7);
hm.delete(46);
hm.insert(56,8);
hm.printHashMap();
}
}
/*
59 : 6
35 : 7
25 : 1
36 : 2
56 : 8
48 : 4
49 : 5
*/
CmNsYXNzIGtleVZhbAp7CiAgICBJbnRlZ2VyIGtleTsKICAgIEludGVnZXIgdmFsOwogICAga2V5VmFsKEludGVnZXIgayxJbnRlZ2VyIHYpCiAgICB7CiAgICAgICAga2V5PWs7CiAgICAgICAgdmFsPXY7CiAgICB9Cn0KY2xhc3MgaGFzaE1hcAp7CgoKICAgIEludGVnZXJbXSBmcmVxLHN0YXRlOwogICAgSW50ZWdlciBzaXplOwogICAga2V5VmFsW10gaGFzaFRhYmxlOwogICAgcHVibGljIGhhc2hNYXAoaW50IHNpemUpCiAgICB7CiAgICAgICAgaGFzaFRhYmxlPW5ldyBrZXlWYWxbc2l6ZV07CiAgICAgICAgZnJlcT1uZXcgSW50ZWdlcltzaXplXTsKICAgICAgICBzdGF0ZT1uZXcgSW50ZWdlcltzaXplXTsKICAgICAgICB0aGlzLnNpemU9c2l6ZTsKICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHNpemU7IGkrKykgewogICAgICAgICAgICBzdGF0ZVtpXSA9IDA7CiAgICAgICAgICAgIGZyZXFbaV0gPSAwOwogICAgICAgIH0KICAgIH0KICAgIHByaXZhdGUgSW50ZWdlciBoYXNoKEludGVnZXIgaykKICAgIHsKICAgICAgICByZXR1cm4gay5oYXNoQ29kZSgpJXNpemU7CiAgICB9CiAgICBwdWJsaWMgdm9pZCBpbnNlcnQoSW50ZWdlciBrLEludGVnZXIgdikKICAgIHsKICAgICAgICBJbnRlZ2VyIGhvbWU9aGFzaChrKTsKICAgICAgICBJbnRlZ2VyIGk9aG9tZTsKICAgICAgICBrZXlWYWwgbm49bmV3IGtleVZhbChrLHYpOwogICAgICAgIHdoaWxlKHN0YXRlW2ldPT0xKQogICAgICAgIHsKICAgICAgICAgICAgaWYoaGFzaFRhYmxlW2ldLmtleS5lcXVhbHMoaykpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGhhc2hUYWJsZVtpXS52YWw9djsKICAgICAgICAgICAgICAgIGZyZXFbaV0rKzsKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQogICAgICAgICAgICBpPShpKzEpJXNpemU7CiAgICAgICAgICAgIGlmKGk9PWhvbWUpewogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGhhc2hUYWJsZVtpXT1ubjsKICAgICAgICBzdGF0ZVtpXT0xOwogICAgICAgIGZyZXFbaV09MTsKICAgIH0KICAgIHB1YmxpYyBCb29sZWFuIGRlbGV0ZShJbnRlZ2VyIGspCiAgICB7CiAgICAgICAgSW50ZWdlciBob21lPWhhc2goayk7CiAgICAgICAgSW50ZWdlciBpPWhvbWU7CiAgICAgICAgd2hpbGUoc3RhdGVbaV0hPTAgJiYgIWhhc2hUYWJsZVtpXS5rZXkuZXF1YWxzKGspKQogICAgICAgIHsKICAgICAgICAgICAgaT0oaSsxKSVzaXplOwogICAgICAgICAgICBpZihpPT1ob21lKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYoc3RhdGVbaV09PTEgJiYgaGFzaFRhYmxlW2ldIT1udWxsICYmIGhhc2hUYWJsZVtpXS5rZXkuZXF1YWxzKGspKQogICAgICAgIHsKICAgICAgICAgICAgZnJlcVtpXS0tOwogICAgICAgICAgICBpZihmcmVxW2ldPT0wKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBzdGF0ZVtpXT0tMTsKICAgICAgICAgICAgICAgIGhhc2hUYWJsZVtpXT1udWxsOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICBwdWJsaWMgSW50ZWdlciBzZWFyY2goSW50ZWdlciBrKQogICAgewogICAgICAgIGludCBob21lPWhhc2goayk7CiAgICAgICAgaW50IGk9aG9tZTsKICAgICAgICB3aGlsZShzdGF0ZVtpXSE9MCkKICAgICAgICB7CiAgICAgICAgICAgIGlmKGhhc2hUYWJsZVtpXSE9bnVsbCAmJiBoYXNoVGFibGVbaV0ua2V5LmVxdWFscyhrKSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgcmV0dXJuIGhhc2hUYWJsZVtpXS52YWw7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaT0oaSsxKSVzaXplOwogICAgICAgICAgICBpZihpPT1ob21lKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gbnVsbDsKICAgIH0KICAgIHB1YmxpYyB2b2lkIHByaW50SGFzaE1hcCgpCiAgICB7CiAgICAgICAgZm9yKGludCBpPTA7aTxzaXplO2krKykKICAgICAgICB7CiAgICAgICAgICAgIGlmKHN0YXRlW2ldPT0xKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oaGFzaFRhYmxlW2ldLmtleSsiIDogIitoYXNoVGFibGVbaV0udmFsKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KICAgIAp9CnB1YmxpYyBjbGFzcyBNYWluCnsKICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZyBhcmdzW10pCiAgICB7CiAgICAgICAgaGFzaE1hcCBobT1uZXcgaGFzaE1hcCgxMCk7CiAgICAgICAgaG0uaW5zZXJ0KDI1LDEpOwogICAgICAgIGhtLmluc2VydCgzNiwyKTsKICAgICAgICBobS5pbnNlcnQoNDYsMyk7CiAgICAgICAgaG0uaW5zZXJ0KDQ4LDQpOwogICAgICAgIGhtLmluc2VydCg0OSw1KTsKICAgICAgICBobS5pbnNlcnQoNTksNik7CiAgICAgICAgaG0uaW5zZXJ0KDM1LDcpOwogICAgICAgIGhtLmRlbGV0ZSg0Nik7CiAgICAgICAgaG0uaW5zZXJ0KDU2LDgpOwogICAgICAgIGhtLnByaW50SGFzaE1hcCgpOwogICAgfQp9Ci8qCjU5IDogNgozNSA6IDcKMjUgOiAxCjM2IDogMgo1NiA6IDgKNDggOiA0CjQ5IDogNQoqLw==