zoukankan      html  css  js  c++  java
  • 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;
        }
    
    }
  • 相关阅读:
    45 岁,还写代码吗?
    给你 8 个接私活的网站
    一文回顾 Java 入门知识(下)
    5 种前途迷茫的编程语言
    JVM 内存的结构模型、堆与堆栈原理、对象在内存中的结构
    mysql 索引是否能提高UPDATE,DELETE,INSERT 处理速度
    【诈尸】【游戏】多人联机游戏推荐
    250.统计同值子树
    366. 寻找二叉树的叶子节点
    156.上下翻转二叉树
  • 原文地址:https://www.cnblogs.com/cbxBlog/p/9127128.html
Copyright © 2011-2022 走看看