java基础
qq_42524262
这个作者很懒,什么都没留下…
展开
-
如何将map转换为实体类
今天写项目时需要把map中的值写到对应的实体类中去,以前在遇到同样的问题时因为需要的数据只要那么几个字段,所以通过get和set的方式感觉还行不是特别麻烦,而这次需要几乎所有字段,一共有十几个,如果还是才采用这用方式实在太麻烦。查阅资料后发现了两个不错的方法方法一<dependency> <groupId>com.alibaba</groupId>...原创 2020-02-19 20:24:18 · 4649 阅读 · 0 评论 -
hashMap和hashSet的底层原理解析及两者区别
哈希表hashMap和hashSet的底层数据结构都采用哈希表结构。在JDK1.8之前,哈希表底层采用数组+链表实现,即使用链表处理哈希冲突,同一hash值的链表都存储在一个链表里。1,为什么用了一维数组:数组的查找时间复杂度小,为O(1),只要拿到数组的索引值,就可以直接找到想要的数据;但数组存储区间是连续的,占用内存严重,故空间复杂的很大。数组的特点是:寻址容易,插入和删除困难2,为什...原创 2019-09-07 21:45:25 · 3041 阅读 · 1 评论 -
hashMap的数组长度,加载因子及转红黑树的阈值解析
hashMap的数组长度为什么要求是2的整数次幂为了能让 HashMap 存取高效,尽量较少碰撞,也就是要尽量把数据分配均匀。Hash 值的范围值-2147483648到2147483647,前后加起来大概40亿的映射空间,只要哈希函数映射得比较均匀松散,一般应用是很难出现碰撞的。但问题是一个40亿长度的数组,内存是放不下的。所以这个散列值是不能直接拿来用的。用之前还要先做对数组的长度取模运算,...原创 2019-09-08 16:21:19 · 2703 阅读 · 1 评论 -
jdk1.7hashMap环链的产生以及jdk1.8对hashMap扩容的优化。
jdk1.7hashMap扩容当我们插入值时,如果hashMap数组达到阈值且当前数组位置不为空,那么它就会进行扩容。但在jdk1.7版本中,多线程下,多个线程对一个hashMap操作是会产生环链的。下面是hashMap扩容将元素转移的主要代码,也是环链产生的地方。void transfer(Entry[] newTable) { Entry[] src = table; ...原创 2019-09-08 21:52:13 · 861 阅读 · 0 评论