手工实现HashMap
自定义的HashMap,以便加强对HashMap底层的了解
清晨叫醒我
这个作者很懒,什么都没留下…
展开
-
手动实现HashMap4_get查找键值对
手动实现HashMap4_get查找键值对get方法 public Object get(Object key) { Object value = null; int hash = myHash(key.hashCode(),table.length); Node2 temp = table[hash]; while(temp!=null) { if(temp.key.equals(key)) { value = temp.value; break; }els原创 2020-11-02 23:01:45 · 154 阅读 · 0 评论 -
手动实现HashMap3_实现toString方法,方便查看Map中的键值对信息
手动实现HashMap3_实现toString方法,方便查看Map中的键值对信息toString方法代码块public String toString() { StringBuilder sb = new StringBuilder('['); for(int i=0;i<table.length;i++) { Node2 temp = table[i]; while(temp!=null) { sb.append(temp.key+":"+temp.value+","原创 2020-11-02 22:35:29 · 340 阅读 · 0 评论 -
手工实现HashMap2_解决键(key)重复问题_链表生成问题
手工实现HashMap2_解决键(key)重复问题_链表生成问题解决键重复问题_链表生成问题方法代码块 public void put(Object key,Object value) { boolean repeat = false; Node2 newNode = new Node2(); newNode.hash = myHash(key.hashCode(),table.length); newNode.key = key; newNode.value = value;原创 2020-11-02 20:40:17 · 211 阅读 · 0 评论 -
手工实现HashMap1_基本结构_put存储键值对
手工实现HashMap1_基本结构_put存储键值对节点类public class Node2 { int hash; Object key; Object value; Node2 next;}基本结构_put方法public class SxtHashMap1 { Node2[] table;//位桶数组 bucket array int size;//存放键对个数 public SxtHashMap1() { table = new Node2[16];//长度一般为2的原创 2020-11-02 17:21:12 · 133 阅读 · 0 评论 -
HashMap底层原理2_查找键值的过程_扩容问题
HashMap底层原理_查找键值的过程取数据过程get(key)我们需要通过key对象获得“键值对”对象,进而返回value对象。明白了存储数据过程,取数据就比较简单了,参见以下步骤: (1) 获得key的hashcode,通过hash()散列算法得到hash值,进而定位到数组的位置。 (2) 在链表上挨个比较key对象。 调用equals()方法,将key对象和链表上所有节点的key对象进行比较,直到碰到返回true的节点对象为止。 (3) 返回equals()为true的节点对象的v原创 2020-11-02 16:03:50 · 365 阅读 · 0 评论 -
HashMap底层原理1_存储键值对底层过程
HashMap底层原理_存储键值对底层过程HashMap的本质HashMap底层实现采用了哈希表,这是一种非常重要的数据结构。对于理解很多其他技术都非常有帮助(比如:redis数据库的核心技术和HashMap一样)数据结构中由数组和链表来实现对数据的存储,他们各有特点。 (1) 数组:占用空间连续。 寻址容易,查询速度快。但是,增加和删除效率非常低。 (2) 链表:占用空间不连续。 寻址困难,查询速度慢。但是,增加和删除效率非常高。哈希表就是了结合数组和链表的优点(即查询快,增删效率也高原创 2020-11-02 15:44:27 · 452 阅读 · 0 评论 -
HashMap和HashTable
HashMap和HashTableHashMapHashMap采用哈希算法实现,是Map接口最常用的实现类。 由于底层采用了哈希表存储数据,我们要求键不能重复,如果发生重复,新的键值对会替换旧的键值对。 HashMap在查找、删除、修改方面都有非常高的效率。Map接口常用的方法:public class TestMap { public static void main(String[] args) { Map<Integer, String> m1 = new原创 2020-11-02 15:20:43 · 113 阅读 · 0 评论