HashMap----Hashtable-=--CurrentHashMap相关问题

1.HashMap原理

ps:存取顺序无法保证一致(无序)

当调用add()时,首先会调用对象的hashcode()方法,计算出一个哈希值(int整数),用该哈希值去map集合中查找是否存在相同哈希值的对象如果不相同,就直接存储..如果相同,则调用对象的equals()方法比较两者内容是否相同..如果不同,则存储到该索引下链表的下一个分支,如果相同,则不保存.

ps:

①:jdk8之前,哈希结构=Object数组+链表....jdk8之后,变为Object数组+二叉树,提高查找效率

②:HashMap存在默认的负载因子,大小为0.75.当一个map填满了75%的bucket,HashMap会和其他集合一样创建原来两倍大小的数组,重新调整map大小,并将原来的对象放入新的数组中,叫做rehashing过程

调整map大小:在多线程的情况下,会产生条件竞争,每个线程都会发现HashMap需要调整大小了,会同时尝试调整,造成死循环.

HashMap----Hashtable-=--CurrentHashMap相关问题

2.HashMap和Hashtable的区别

相同:都实现了map接口..存取无序.

区别:HashMap是非synchronized,可以接受键值为null,线程不安全.多线程下无法共享一个HashMap,会造成死循环

hashtable是synchronized,可多线程下使用,但被性能更好的currentHashMap所代替.

ps:Collections.synchronizeMap(hashMap)可以让HashMap同步.