数组+链表(可改造红黑树)
根据id查询value值。快速
import java.util.Arrays;
public class HashMapDemo {
public int DEFAULT_TABLE_LENGTH = 16;
public double DEFAULT_LOAD_FACTOR = 0.75;
public HashMapEntry[] table;
public int threhold;
public int size;
public HashMapDemo(){
this.table = new HashMapEntry[this.DEFAULT_TABLE_LENGTH];
threhold = (int) (this.DEFAULT_TABLE_LENGTH*this.DEFAULT_LOAD_FACTOR);
}
public void put(Object key,Object value){
int index = key.hashCode()%table.length;
if(table[index]==null){
table[index] = new HashMapEntry(key,value,null);
}else{
if(table[index].key.hashCode()==key.hashCode()&&(key.equals(table[index].key)||table[index].key==key)){
table[index].value = value;
}else{
table[index] = new HashMapEntry(key,value,table[index]);
++size;
if(this.size>this.threhold){
resize();
}
}
}
}
public Object get(Object key){
int index = key.hashCode()%this.table.length;
if(this.table[index] == null){
return null;
}else{
if(this.table[index].key.hashCode()==key.hashCode()){
return this.table[index].value;
}else{
return null;
}
}
}
public void resize(){
this.DEFAULT_TABLE_LENGTH = this.DEFAULT_TABLE_LENGTH*2;
this.threhold = (int) (this.DEFAULT_TABLE_LENGTH * this.DEFAULT_LOAD_FACTOR);
HashMapEntry[] hashMapEntry = new HashMapEntry[this.DEFAULT_TABLE_LENGTH];
for(int i=0;i<this.table.length;i++){
HashMapEntry hashMapEntryDemo = table[i];
int index;
while(hashMapEntryDemo!=null){
index = hashMapEntryDemo.key.hashCode()%hashMapEntry.length;
if(hashMapEntry[index]==null){
hashMapEntry[index] = new HashMapEntry(hashMapEntryDemo.key,hashMapEntryDemo.value,null);
}else{
hashMapEntry[index] = new HashMapEntry(hashMapEntryDemo.key,hashMapEntryDemo.value,table[index]);
}
hashMapEntryDemo = hashMapEntryDemo.right;
}
}
this.table = hashMapEntry;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
HashMapDemo other = (HashMapDemo) obj;
if (!Arrays.equals(table, other.table))
return false;
return true;
}
public class HashMapEntry{
Object key;
Object value;
HashMapEntry right;
public HashMapEntry(Object key,Object value,HashMapEntry right){
this.key = key;
this.value = value;
this.right = right;
}
}
}