HashMap的工作原理:
hashmap是基于hashing原理实现的,通过put(),get(),方法存储和获取对象。
put()原理:将键值对传递给put()时,它调用键值对的hasCode()方法来计算hashCode,然后找到bucket位置来存储对象。当发生数据碰撞时,即两个不同键对象hashCode相同,用链表解决,会存储在同一个bucket位置的链表的下一结点中。
get()原理:获取对象时,通过键对象的equals()找到正确的键值对象,然后返回值对象。当两个不同的键对象hashCode值相同会存储在同一个bucket位置的链表中,用键对象的equals()方法找到键值对。
HashMap与HashTable的区别:
主要有一下几点区别:
1、线程安全性:
HashTable线程安全,其方法都是Synchronize修饰的(监视器)。
HashMap线程不安全。多线程访问同一个Map时用HashTable更安全。
2、key、value可否为空
HashMap允许key、value为空。它使用get()返回null也可能是存储的null,所以应用containskey。
hashTable不允许为空。当它key为null时,调用put()时,计算它的hash值,hash=key.hashCode(),用null去调用方法,抛出空指针异常,value为null时,判断了value==0,然后throw抛空指针异常。HahTable是一个古老的Map实现类,判断是否包含某个值的方法从contains改成了containsvalue和co