HashMap底层实现练习
/** * Created by chengbx on 2018/5/19. * 简单版 */ public class CbxMap { CbxEntry [] cbxEntries = new CbxEntry[999]; int size; public void put(Object key,Object value){ //解决键重复的问题 for (int i = 0; i < size; i++) { if(cbxEntries[i].getKey().equals(key)){ cbxEntries[i].setValue(value); return ; } } CbxEntry cbxEntry = new CbxEntry(key,value); cbxEntries[size++] = cbxEntry; } public Object get(Object key){ for (int i = 0; i < size; i++) { if(cbxEntries[i].getKey().equals(key)){ return cbxEntries[i].getValue(); } } return null; } public boolean containsKey(Object key){ for (int i = 0; i < size; i++) { if(cbxEntries[i].getKey().equals(key)){ return true; } } return false; } public boolean containsValue(Object value){ for (int i = 0; i < size; i++) { if(cbxEntries[i].getValue().equals(value)){ return true; } } return false; } } class CbxEntry{ private Object key; private Object value; public Object getKey() { return key; } public void setKey(Object key) { this.key = key; } public Object getValue() { return value; } public void setValue(Object value) { this.value = value; } public CbxEntry(Object key, Object value) { this.key = key; this.value = value; } }
/** * Created by chengbx on 2018/5/19. * 优化版 */ public class CbxHashMap { LinkedList[] linkedArr = new LinkedList[999];//Map的底层结构就是:数组 + 链表 int size; public int getHashCodeByKey(Object key){ return key.hashCode() % linkedArr.length; } public void put(Object key,Object value){ CbxEntry cbxEntry = new CbxEntry(key,value); int arrIndex = getHashCodeByKey(key); if(linkedArr[arrIndex]==null){ LinkedList linkedList = new LinkedList(); linkedList.add(cbxEntry); linkedArr[arrIndex] = linkedList; }else{ linkedArr[arrIndex].add(cbxEntry); } } public Object get(Object key){ int arrIndex = getHashCodeByKey(key); if(linkedArr[arrIndex]!=null){ LinkedList linkedList= linkedArr[arrIndex]; for (int i = 0; i <linkedList.size() ; i++) { CbxEntry cbxEntry = (CbxEntry)linkedList.get(i); if(cbxEntry.getKey().equals(key)){ return cbxEntry.getValue(); } } } return null; } }
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步