2016 - 2024

感恩一路有你

hashmap初始化大小多少合适 你经历过哪些有意思的面试题目?

浏览量:2670 时间:2021-03-16 22:12:46 作者:admin

你经历过哪些有意思的面试题目?

你好,我很高兴回答你的问题。

如果你是某个单位的公职人员,你的亲戚朋友经常来找你打听单位的内部事务。如果你有什么事需要你帮忙,你应该怎么处理?][真题]爱狗协会人士反映,最近他们用200条狗堵了一辆车,网上批评刘胡兰、邱少云、琅琊山五杰等中国抗日英雄的言论很多。你觉得这个怎么样?]【真题】近年来,释放积德的行为层出不穷,但最近有人放生老鼠。你怎么认为?

面试题还有很多其他意思,小编不会一一列出,如果你有兴趣,可以去sd.offcn.com网站学习。

hashmap最多能放多少数据?

就是这么说的。。。

没有容量扩展的示例:

如果10个存储桶中有1W数据,并且每个存储桶平均有1000个数据,那么即使jdk8中默认有8个以上的存储桶,它也会将您变成一棵红黑树,那么您查找元素的平均时间是log(base 2)1000。

另一方面,如果扩容。过程同上,但平均时间会大大缩短。

还有谁说12个会扩大?这只是默认值。

JDK文档明确建议在初始化HashMap时,应根据您将来存储的数据量一次性指定其容量和负载因子,以避免扩展(这将导致额外成本)和不浪费内存

1。4字节表示的整数数为2^32≈40亿,2字节表示的无符号整数数为2^16≈60000。

2、2G=2^31b≈20亿字节。

3、为了找出出现次数最多的数字,应记录每个数字的出现次数。最快的方法是记录每个数字在内存中出现的次数。记录方法是记录相应的存储器地址数和相应地址的存储器单元数。但是,2G内存只能记录20亿字节的数字,如果每个数字的出现次数大于255则会发生溢出,没有风险。因此,这种方案是不可取的。

4、这样,磁盘上只能记录每次出现的次数。这样,就在磁盘上创建了一个16g文件。每4个字节对应一个整数,可以对应40亿个整数。用于记录相应整数的个数。

1. 初始化文件。

2. 依次读取数据并用无符号整数记录在磁盘文件中。如果发生溢出,则该数字是次数最多的数字。

3. 从文件中读取每个数字的次数,用变量a记录最高次数,用变量B记录最高次数的数据,用文件依次记录最高次数的数据。当最大次数增加时,a1和B被设置为1,并且该数字被写入文件中。当出现相同次数的数字b1时,该数字被写入文件的相应位置,直到全部被读取为止。

所以您根本不需要2G内存。

挑战程序员同学,如何只用2GB内存从20/40/80亿个整数中找到出现次数最多的数?

有两个原因

1。为了查找和添加元素,模块化操作用于查找数组下标。如果模运算是2的n次方,则可以用位运算符代替,这样效率更高。

2. 扩容方便。

如果直接查看源代码,可以看到扩展的resize方法的参数是2*表.长度(图中是JDK7的源代码),也就是说每次扩容都是容量的两倍,扩容后需要进行数据迁移。如果初始长度为2的n次方,则扩展将减少数据迁移的次数。

例如,初始长度为16,将扩展到32。位置1中的节点仅在扩展后迁移到位置1和17。实际上,I位置的节点只会迁移到I之前和I扩展之后的数组长度。

例如,当数组的长度为16时,它位于1的位置。当它扩展到32时,它会被移到17的位置

例如,当数组的长度为16时,它就在1的位置。当它扩展到32时,它仍然处于1的位置。

这是主要原因。

顺便说一下,在源代码中,如果您不将其设置为2的n次方,它也将帮助您将其设置为2的n次方。例如,如果通过15,它将帮助您将其设置为16。源代码的对应方法是2的整数倍。

希望对您有所帮助。你可以关注我和大家分享一些知识源代码的想法

长度的n次方2。模运算可以通过位运算H&(length-1)得到,所以效率最高

顾名思义,链表HashMap比HashMap更像链表结构。与HashMap相比,LinkedHashMap维护了一个带有双链表的HashMap。LinkedHashMap支持两种排序,一种是插入排序,另一种是使用排序。最近使用的一个将被移到尾部,例如M1 M2 m3 M4。使用m3后,将为M1 M2 M4 m3。当输出LinkedHashMap时,它的元素是连续的,而HashMap的输出是随机的。如果地图映射很复杂并且需要高效率,那么最好使用LinkedHashMap。但是,多线程访问可能会导致异步,因此有必要使用LinkedHashMap集合.synchronizedMap让我们将其打包以同步。它的实现一般如下:map

1。HashSet的底层是用HashMap实现的。HashSet的实现相对简单。HashSet的大多数方法都是通过调用HashMap的方法来实现的。因此,HashSet和HashMap的实现本质上是相同的。

2. HashMap的键是放入HashSet的对象,值是对象类型。

3. 当调用HashSet的add方法时,一行(键值对)实际上被添加到HashMap中。行的键是添加到HashSet的对象,行的值是对象类型的常量

hashmap初始化大小多少合适 hashmap设置初始容量 hashmap定义初始化

版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。