首页 > 其他分享 >手撕HashMap(二)

手撕HashMap(二)

时间:2023-03-29 23:14:25浏览次数:31  
标签:HashMap 删除 hashcodeList remove hashcode 键值 key

  • 这里再补充几个手撕HashMap的方法

1、remove()

  1. remove 方法参数值应该是键值对的键的值,当传入键值对的键的时候,remove 方法会删除对应的键值对
  2. 需要利用我们自己先前创建的 hashcodeList 来实现,hashcodeList 存入了所有被使用的 hashcode 值,方便后续的操作
  3. 在 put() 中,当添加新的键值对时,就会调用hashcodeList.add(hashcode);来存入添加的 hashcode 值
  4. hashcodeList:
    /**
     * 不需要遍历数组,大大减少了代码量,直接存入hashcode的值
     * 用来记录被使用的hashcode,方便后续其他方法的操作
     */
    List<Integer> hashcodeList = new ArrayList<>();
  1. remove() 方法的思路:
    • 根据传入的 key 的值,遍历 hashmap
    • 当 key 的值相同时,删除它,与此同时遍历 hashcodeList
    • 当 hashcodeList 中存储的哈希值与 key 通过 hashcode(key) 方法后得到的哈希值相等时,删除这个 hashcodeList 值
  2. 代码:
     /**
     * 删除传入的key值所对应的键值对对象
     *
     * @param key 传入的key
     */
    @Override
    public void remove(K key) {
        int hashcode = hashcode(key);
        for (Entry<K, V> entry : mapArr[hashcode]
        ) {
            //要把hashcodeList中的hashcode删除
            hashcodeList.removeIf(integer -> hashcode(entry.getKey()) == integer);
            //删除 mapArr 
            if (entry.getKey().equals(key)) {
                mapArr[hashcode].remove();
            }
        }
    }

标签:HashMap,删除,hashcodeList,remove,hashcode,键值,key
From: https://www.cnblogs.com/lynnier/p/17270880.html

相关文章

  • ]Java中HashMap遍历的两种方式
    笔试的时候,两次都要用到工具类hashmap,这个东西用起来果然爽啊,但是在我遍历这个map的时候,迭代器写不出来了,真是悲催了,于是还是找下吧,下面的可是要记住用处啊Java中HashM......
  • 手撕HashMap
    HashMap基本了解1、jdk1.7之前,HashMap底层只是数组和链表2、jdk1.8之后,HashMap底层数据结构当链表长度超过8时,会转为红黑树3、HashMap利用空间换时间的思想,将键值对......
  • HashMap和LinkedHashMap遍历机制
    原文链接:HashMap和LinkedHashMap遍历机制对HashMap和LinkedHashMap遍历的几种方法以HashMap为例,LinkedHashMap方法一样。一共有三种遍历方式Iterator<Map.Entry......
  • Java数据结构 HashMap 哈希表定义使用
    1.HashMapHashMap是一个散列表,它存储的内容是键值(key-value)映射。其中key和value类型可以相同也就而已不同,根据定义。2.HashMap使用1)定义HashMap<Integer,String>hashmap1......
  • 为什么HashMap查找比List快很多?
    做两数之和这道题目时,引发了一个思考:为什么两者运行时间相差如此之大???好残忍,我List比你HashMap到底差在哪****于是我一顿查资料....战犯哈希算法登场哈希算法......
  • Java中Map类型数据使用LinkedHashMap保留数据的插入顺序
    场景Vue中JS遍历后台JAVA返回的Map数据,构造对象数组数据格式:Vue中JS遍历后台JAVA返回的Map数据,构造对象数组数据格式_BADAO_LIUMANG_QIZHI的博客在上面构造以时间为Key,以......
  • HashMap底层源码分析
    HashMap底层源码分析今天先简单看看HashMap的底层源码,之后做详细的分析以及与其他集合的对比。1.看源码之前需要了解的一些内容Node<K,V>[]table哈希表结构中数组......
  • hashmap,hashtabl,hashtree,linkedhashmap区别分析
    java为数据结构中的映射定义了一个接口java.util.Map;它有四个实现类,分别是HashMapHashtableLinkedHashMap和TreeMap.Map主要用于存储健值对,根据......
  • Java HashMap为什么线程不安全
    一、学习目标1、HashMap线程不安全原因:原因:JDK1.7中,由于多线程对HashMap进行扩容,调用了HashMap#transfer(),具体原因:某个线程执行过程中,被挂起,其他线程已经完成数据迁......
  • hashmap get、put时间复杂度
    在JDK8之前用单链表HashMap作为一个桶来储存存在哈希碰撞的元素。无论是get还是put方法,步骤都可以分为第一步找桶(找桶时间都为O(1),可以忽略),第二步在桶内进行操作(查找或......