简单实现一个自定义的HashMap——高淇JAVA300讲笔记之HashMap

  Map的底层结构就是:数组+链表。以下代码实现了put()和get()方法。

 1 package cn.bjsxt.collection;
 2 
 3 import java.util.LinkedList;
 4 
 5 /**
 6  * 自定义Map的升级版:
 7  * 1.提高查询的效率
 8  *
 9  */
10 public class SxtMap002 {
11     
12     LinkedList[] arr = new LinkedList[999];  //Map的底层结构就是:数组+链表!
13     int size;
14     
15     public void put(Object key, Object value) {
16         SxtEntry e = new SxtEntry(key, value);
17         
18         int hash = key.hashCode();
19         hash = hash<0?-hash:hash;
20         int a = hash % arr.length;  //用key的哈希值除数组长度取余作为数组下标
21         if(arr[a]==null) {
22             LinkedList list = new LinkedList();
23             arr[a] = list;
24             list.add(e);
25             
26         } else {
27             LinkedList list = arr[a];
28             for(int i=0;i<list.size();i++) {
29                 SxtEntry e2 = (SxtEntry)list.get(i);
30                 if(e2.key.equals(key)) {
31                     e2.value = value;  //键值重复直接覆盖!
32                     return;
33                 }
34             }
35             
36             arr[a].add(e);
37         }
38         
39     }
40     
41     public Object get(Object key) {
42 //        return arr[key.hashCode() % 999];
43         int a = key.hashCode() % arr.length;
44         if(arr[a] != null) {
45             LinkedList list = arr[a];
46             for(int i=0;i<list.size();i++) {
47                 SxtEntry e = (SxtEntry)list.get(i);
48                 if(e.key.equals(key)) {
49                     return e.value;
50                 }
51             }
52         }
53         
54         return null;
55         
56     }
57     
58     
59     public static void main(String[] args) {
60         SxtMap002 m = new SxtMap002();
61         m.put("高淇", new Wife("杨幂"));
62         m.put("高淇", new Wife("李四"));
63         Wife w = (Wife)m.get("高淇");
64         System.out.println(w.name);
65     }
66 
67 }

运行结果,原来的值被覆盖了。

李四

 

 

  

posted on 2018-01-22 23:20  爱游泳的小飞象  阅读(163)  评论(0编辑  收藏  举报

导航