- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我知道java Hashmap有一个容量和负载因子参数。所以,如果这个hashmap中的项目数量超过容量*负载因子,一个新的hashmap将被重建。我对重建有一些疑问它:
最佳答案
The previous hashmap will be reclaimed or still be in use if the reconstruction happened?
还是原来的hashmap,只是内部存储被重构了。重建后,不再需要旧的存储桶数组,可以对其进行GC。
更新:内部 HashMap
有Node<K,V>[] table
。在调整大小期间,将构造一个新数组,移动元素,然后 table
被替换为新数组。在该操作之后,映射本身将不再引用旧数组,因此除非没有其他引用(这不太可能,因为 table
是包私有(private)的),否则它适合 gc。
since we need a larger size hashmap , so , will the hash function be changed ?
不,哈希函数不会改变。它通常不依赖于存储桶的数量,但生成的哈希将被调整以获得正确的存储桶(例如通过应用模数)
更新:HashMap
像这样计算存储桶索引:(size - 1) & hash
, hash
是键的返回值hashCode()
方法,不依赖于 map 本身。
For ConcurrentHashMap , what if one thread is inserting(Of cource, this insert operation has lead to a re-construction) and another thread is reading?For example, it will read from the old hashmap or from the new hashmap?
我必须在这里猜测(我稍后会查找代码),但我假设只要线程从旧存储桶中读取它们,它们仍然会被使用,并且稍后会被释放。
更新:我快速浏览了 ConcurrentHashMap
来源和引用目前的table
由 get()
使用和一个可能的nextTable
这是调整大小操作的目标。在调整大小期间,元素将转移到 nextTable
最后table
设置为nextTable
,有效地切换表。
这意味着在调整大小期间,旧表仍会被读取,并且在某些时候它会被替换。在插入操作期间,可能会出现一些阻塞,例如通过使用同步块(synchronized block),特别是在需要或已经执行调整大小的情况下。
文档也暗示了这一点:
A hash table supporting full concurrency of retrievals and high expected concurrency for updates.
这意味着 get
不会阻止但 put
, remove
等等。可能在某个时刻阻塞。
关于java - 如果 HashMap 满了怎么办?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26904689/
我编写了一个函数来包含两个 DateTime 之间的小时列表。 但最后它看起来并不是很容易阅读,这让我想对它进行单元测试,即使我正在从事的项目根本没有进行单元测试。 所以我的问题是,是否有一种更易读或
我一定是漏掉了什么,因为我还没有在网上找到这个非常基本的问题的答案。我正在使用能够容纳三个 int 的缓冲 channel 值。 然后我使用三个 goroutine 来填充它,一旦缓冲 channel
我发现如果一个矩阵(几乎)满了,那么将它存储在稀疏中会导致(更多)更多的计算时间。 虽然以稀疏形式存储完整矩阵是微不足道的,但我只想知道这一事实背后的原因。 我的推测是稀疏索引读取将是计算时间的主要贡
root@root:~# sudo du -ch --max-depth=1 --exclude=/home/ / du: cannot access ‘/sys/kernel/slab/L2TP/I
基本上我想创建一个 UIProgressView 在 3 秒内从 0.0(空)到 1.0(满)。有人能指出我在 swift 中使用 NSTimer 与 UIProgressView 的正确方向吗? 最
我是一名优秀的程序员,十分优秀!