最新回答 / 慕少3592971
1万的空间和100万差别很大16和100万差别也很大,在100万数据面前,16383的空间和16的并没有什么差别。再加上重复运行相同代码,Java会对优化,可能会更快。所以会造成16的比16384快的可能。
2023-04-16
已采纳回答 / 慕婉清5302366
LRU是Least Recently Used的缩写,即最近最少使用,是一种常用的页面置换算法,选择最近最久未使用的页面予以淘汰。 按照语义来说,既然是最近最少使用的,肯定是最近最少使用的排在前面,最近最多使用的放在后面,所以使用过的放在后面。 还有,链表的话,删除头部也要比删除尾部效率更高,因为删除尾部需要链表从头部遍历到要删除的节点。 个人理解,如果错了,不要笑话哈。?
2020-11-22
最新回答 / 蒲公英wsg
结点产生的链表长度超过8时, 就会自动转为红黑树。这样做的目的是减少get查找的时间复杂度, 链表的查找时间复杂度为O(n), 红黑树的查找时间复杂度为O(logN)
2020-10-21
最赞回答 / _dark
实体类不适合作为key,实体类他存储的是引用地址,比较的时候也是引用地址,而不是对象的值,两次new出来的实体,虽然内容一样,但是地址不一样,会作为两个key来存储
2020-07-30
最新回答 / qq_Eve小情绪_23806791
创建hashmap对象时如果是无参创建,默认负载因子就是0.75。如果是有参的话,可以自定义大小及负载因子的配置。但是负载因子设置0.75为性能最优。如果要计算负载因子:存储数据的长度/创建hashmap的长度。你要问的是计算实际使用长度吧?如果使用默认长度是16,负载因子默认是0.75.那个可使用长度实际上为16*0.75的长度为12.如果超过长度12就会自动扩容为原长度的2倍为长度32,给之前赋的值再进行hash计算,重新定位。
2020-07-09
最赞回答 / botao555
你的理解有偏差, 跟是否产生hash碰撞没关系!! new HashMap(10000, 0.75f)这里的10000指的是map里存的key的数量, map里有个成员变量size来记录的, 不是代表数组大小! 可以看HashMap的put方法的源码, 如果key已存...
2020-06-24
最新回答 / 隔壁老杜不风流
不会,老师讲的很明白了,如果不发生碰撞的话,是会扩容,照你的比如,key通过hash取址后只有10000(超过12288才会扩容),未达到16384*0.75=12288,所以是不会扩容的,这是我的理解,如果回答错误还望指正。
2020-06-18
最赞回答 / Kevin_Glaser
我是HashMap和LinkedHashMap分开写的,HashMap的赋值取值完毕了再去运行LinkedHashMap的,但是我的赋值是LinkedHashMap快,取值反而LinkedHashMap慢了
2020-06-14