1.原理
2.代码
Map
package com.mapText;
public interface Map<K,V> {
V put(K k,V v);
V get(K k);
int size();
interface Entry<K,V>{//创建一个对象,用于装值
K getKey();
V getValue();
}
}
HashMap
package com.mapText;
public class HashMap<K,V> implements Map<K,V> {
private Entry<K,V> table[]=null;
int size=0;
public HashMap() {
this.table = new Entry[16];
}
@Override
public V put(K k,V v) {
int index=hash(k);
Entry<K,V> entry=table[index];
if(entry==null){
table[index]=new Entry<K,V>(k,v,index,null);
}else{
table[index]=new Entry<K,V>(k,v,index,entry);
}
size++;
return v;
}
@Override
public V get(K k) {
int index=hash(k);
if(table[index]==null){
return null;
}else{
return Search(k,table[index]);
}
}
/**
* 返回map长度
* @return
*/
@Override
public int size() {
return size;
}
/**
*
*
* @param k 查询的k值
* @param entry 待查询的链表
* @return
*/
public V Search(K k,Entry<K,V> entry){
if(k==entry.key){
return entry.getValue();
}else{
if(entry.entry!=null){
return Search(k,entry.entry);
}
}
return null;
}
/**
* 获取K的哈希值
* @param k
* @return
*/
private int hash(K k){
int index=k.hashCode()%16;
return index>0?index:-index;
}
class Entry<K,V> implements Map.Entry<K,V>{
private K key;
private V value;
private int hashcode;
private Entry<K,V> entry;
public Entry(K key, V value, int hashcode, Entry<K, V> entry) {
this.key = key;
this.value = value;
this.hashcode = hashcode;
this.entry = entry;
}
@Override
public K getKey() {
return this.key;
}
@Override
public V getValue() {
return this.value;
}
}
}
test
package com.mapText;
public class test {
public static void main(String[] args) {
Map<String,String> map = new HashMap<String, String>();
map.put("11","111");
map.put("22","222");
map.put("33","333");
System.out.println(map.get("11"));
System.out.println(map.get("22"));
System.out.println(map.get("33"));
System.out.println(map.size());
}
}