public class MyMap002 {
LinkedList[] arr=new LinkedList[999]; //Map底层结构是链表数组
int size;
public void put(Object key,Object value){
MyEntry e=new MyEntry(key,value);
int hash=key.hashCode();
hash=hash<0?-hash:hash; //确保hash为正数
int a=hash%arr.length; //尽可能的均摊到arr.length个数中
if(arr[a]==null){ //未冲突
LinkedList list=new LinkedList();
arr[a]=list;
list.add(e);
}else { //有冲突
LinkedList list=arr[a];
for(int i=0;i<list.size();i++){
MyEntry e1 = (MyEntry) list.get(i);
if(e1.key.equals(key)){
e1.value=value; //键值重复,覆盖前一个value
}
}
arr[a].add(e);
}
}
public Object get(Object key){
int a=key.hashCode()%arr.length;
if(arr[a]!=null){
LinkedList list=arr[a];
for(int i=0;i<list.size();i++){
MyEntry e = (MyEntry) list.get(i);
if(e.key.equals(key)){
return e.value;
}
}
}
return null;
}
public static void main(String[] args) {
MyMap002 m=new MyMap002();
m.put("aa","AA");
m.put("bb","BB");
m.put("cc","CC");
m.put("cc","DD");
String s=(String)m.get("cc");
System.out.println(s);
}
}
class MyEntry{
Object key;
Object value;
public MyEntry(Object key, Object value) {
this.key = key;
this.value = value;
}
}
</br>
HashSet底层用HashMap实现,把存入HashSet的值放入HashMap的key中,HashMap的value中存放static final的Object对象