简单实现一个自定义的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 }
运行结果,原来的值被覆盖了。
李四