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;
        }
    
    }
  • 相关阅读:
    androidstudio提示adb错误:cannot parse version string:kg01的解决方法
    mysql常用运行原理
    shiro认证授权
    Java多线程入门(一)——多线程基本概念
    CSS简单入门
    H5入门这一篇就够了
    Java IO流详解(八)——其他流的使用
    Java IO流详解(七)——对象流(序列化与反序列化)
    Java IO流详解(六)——转换流
    Java IO流详解(五)——缓冲流
  • 原文地址:https://www.cnblogs.com/cbxBlog/p/9127128.html
Copyright © 2011-2022 走看看