我目前有一个固定大小的链表 HashMap,我想知道通过调用 get() 然后修改该链表的内容(添加/减去)来修改两个不同键的值是否安全节点和东西)?我知道由于可能的调整大小问题,同时修改不同的键是不安全的,但是 1) hashmap 的大小是固定的并且链表都是从头开始初始化的(作为空列表)和 2) 我怀疑在这种情况下,HashMap 会存储指向链表的指针,因此修改列表实际上不会修改 HashMap 的内容,但我不能确定。
有没有更熟悉 Java 的人能够回答这个问题?我一开始没有使用线程安全数据结构的原因是因为我的项目规范禁止它。谢谢!
最佳答案
这应该没问题,因为 map 实际上是只读的。您可能希望在使用 Collections.unmodifiableMap
初始化它时强制执行此操作或 Guava 的 ImmutableMap
.
但链表是另一回事,除非您可以保证单线程访问每个单独的列表。如果没有,一个快速的解决方案是使用 Collections.synchronizedList
包装每个列表在创建时。或者你可以看看使用 ConcurrentLinkedQueue
s 代替。
关于java - 同时修改 HashMap 的条目是否安全...如果映射的大小是固定的并且条目是链表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16290547/