Ste*_*n C 12
以下是一些可能导致条目"丢失"的事情:
在您的密钥对象上错误地实现了equals/hashcode方法.这两种方法需要符合哈希表的"契约"才能正常工作.最重要的财产是:
key1.equals(key2) IMPLIES key1.hashcode() == key2.hashcode
Run Code Online (Sandbox Code Playgroud)在地图中使用键时更改的可变键对象.特别是,如果密钥更改导致密钥的哈希码发生更改,则它将丢失.(在这种情况下,如果您遍历整个地图,条目将显示.但是使用查找的地图操作将找不到它们......因为它们位于错误的哈希链上.)
最安全的方法是使用不可变的密钥类.
在没有正确同步的情况下在多线程应用程序中使用映射.这可能导致地图数据结构的损坏,这可能表现为丢失的条目.
您不知道的应用程序的其他部分是删除条目.
陈述/声明您必须覆盖equals并且hashcode/不正确的答案.在某些情况下Object,这些方法的实现正是所需要的.你必须做的就是确保:
equals并hashcode遵守"合同".我该怎么做才能解决这个问题?
我建议进行代码检查以检查上述问题.
调试是另一种选择.例如,您可以查看是否可以在错误的哈希链上找到缺少的条目.但是,我怀疑这种做法可能会有点"失误".
我使用weblogic作为服务器.
不相关......除非你碰巧使用的是由Weblogic而不是J2SE实现的Map实现类.(查看对象的类名.)
我应该玩任何环境价值吗?
无济于事
| 归档时间: |
|
| 查看次数: |
6129 次 |
| 最近记录: |