HashMap数组
HashMap其实就是内部列Entry类型的数组---Entry<K,V> table安全
在这里看几个问题 1HashMap如何存数据(包括如何自动扩容) 2 Map如何取出数据 3 如何删除数据测试
1 put方法spa
①首先经过hash(Object key)生产hash值,而后indexFor()的位运算计算出value存放在数组的下标线程
②在新增元素以前先判断集合中的元素及table数组中的元素是否达到了数组容量的0.75,若是达到就扩容,其中0.75能够在实例化对象指定对象
③自动扩容建立一个新的长度的数组对象,而后把旧数组的元素一个一个的复制到新数组。rem
④数组内容复制get
⑤自动扩容以后就增长元素同步
2 get方法:根据key获取数据hash
3 remove(Object key)
总结
1 HashMap本质就是一个数组,经过hash(Object key)方法根据key来生成hash值,而后经过位运算运算出数组的下标,再经过下标实现数据的增删改查。
2 HashTable和HashMap的区别
①相同点:实现思路和代码逻辑如出一辙
不一样点:
① HashTable的put方法、get方法等都使用synchronized关键字加入同步锁保证线程安全
② 两个自动扩容的方法名不同
③HashMap把增长元素的代码封装到一个方法,HashTable直接写在put方法
注意点:
关于hash值的生成
1 若是key是String类型的,则只有内容相同,无论是否同一个对象,则生成的hash值都是同样的
2 若是key不是String类型,对象不同则hash值不一样
测试代码以下