[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UERzyuov-1590064090593)(C:Users25220AppDataRoamingTyporatypora-user-imagesimage-20200521201714798.png)] jdk1.7: key value形式,key可以为null 数组+链表 由hash表结构实现 负载因子:0.75 初始容量:16===2^4 为甚么会出现哈希碰撞:hash值最大为int的最大值,有限,所以总会有元素不同,hash值相同的情况 set时,根据哈希算法算出存放的位置bucket( h & (length-1),尽量保证每个位置都存放数据,保证散列性),然后插入到链表的头结点(效率高,插入到尾节点的话需要遍历),然后把头结点移动到bucket位置(方便get,不然get的时候上下都得遍历) get时,根据hash值找到bucket,然后遍历链表通过key的equals找到指定的元素 扩容机制:超过超过阈值(数据存储的位置数量>集合容量*0.75)就会触发扩容,扩大两倍(保证散列性),需要重新使用hash算法,对所有元素重新进行存放,非常消耗性能。同时可能在扩容的过程会出现死锁问题(多线程环境下,因为采用的是头插入法,看图),在创建时尽量确定容量,避免扩容 为什么扩大两倍:0001 1111这个时候,原来的数据如果倒数第5位2进制为0,则在原位置不变,如果是1的话,那就会放到扩容的位置进行存储,保证了散列性 如果你自己初始化容量,底层会自动给你增加到2的整数倍,为了保证散列性 jdk1.8 jdk1.7:死循环(环形链) jdk1.8:put时数据覆盖 hashMap:线程不安全 ConcurrentHashMap:线程安全,相比于HashTable同步性能更好,因为它仅仅根据同步级别对 map 的一部分进行上锁。 hashTable:提供更强的线程安全性,但是性能不如ConcurrentHashMap 底层通过HashMap来存储数据,可以进行去重,线程不安全 底层通过HashMap来存储数据,可以进行去重,线程不安全
Java集合
集合体系图
1.ArrayList底层实现
2.LinkedList底层实现
3.HashMap底层实现
4.HashMap为什么线程不安全
5.HashMap,conCurrentHashMap,hashTable的使用
6.HashSet原理
7.ArrayList与Vector
HashSet原理7.ArrayList与Vector
本网页所有视频内容由 imoviebox边看边下-网页视频下载, iurlBox网页地址收藏管理器 下载并得到。
ImovieBox网页视频下载器 下载地址: ImovieBox网页视频下载器-最新版本下载
本文章由: imapbox邮箱云存储,邮箱网盘,ImageBox 图片批量下载器,网页图片批量下载专家,网页图片批量下载器,获取到文章图片,imoviebox网页视频批量下载器,下载视频内容,为您提供.
阅读和此文章类似的: 全球云计算