hashmap可以接受null键值和值,而HashTable则不能
HashMap是非synchronized
HashMap很快
以及HashMap储存的是键值对
hashmap的工作原理:HashMap是基于hashing的原理,我们使用put(key, value)存储对象到HashMap中,使用get(key)从HashMap中获取对象。当我们给put()方法传递键和值时,先对Key调用hashCode方法,来计算hash值,返回的hash值用来找bucket对象,来放entry键值对。
当两个对象的hashcode相同时,会发生“碰撞”。hashmap底层是通过链表来解决hash冲突的
当两个对象的hashcode相同时,如何获取对象?
HashMap会使用键对象的hashcode找到bucket位置,找到bucket位置之后,会调用keys.equals()方法去找到LinkedList中正确的节点,最终找到要找的值对象。从HashMap中get元素时,首先计算key的hashCode,找到数组中对应位置的某一元素,然后通过key的equals方法在对应位置的链表中找到需要的元素。
如果hashmap大小超过了负载因子定义的容量,默认的负载因子大小为0.75,也就是说,当一个map填满了75%的bucket时候,和其它集合类(如ArrayList等)一样,将会创建原来HashMap大小的两倍的bucket数组,来重新调整map的大小,并将原来的对象放入新的bucket数组中。这个过程叫作rehashing,因为它调用hash方法找到新的bucket位置
hashmap常见问题
最新推荐文章于 2024-07-18 16:58:05 发布