当前位置:  开发笔记 > 编程语言 > 正文

奇怪的HashMap.put()行为

如何解决《奇怪的HashMap.put()行为》经验,为你挑选了2个好方法。

我正在尝试解决间歇性故障,该故障似乎与从HashMap中删除对象然后使用新密钥放回同一对象有关.我的HashMap创建如下:

transactions = new HashMap();

执行重新分配的代码如下:

transactions.remove(transaction.tran_no);
transaction.tran_no = generate_transaction_id();
transactions.put(transaction.tran_no, transaction);

我看到的间歇性行为是,在此之后立即执行的代码依赖于可定位的事务对象,似乎不会使用新的事务id找到事务对象.但是,在将来的某个时刻,可以找到交易.所以拉扯秸秆,put()或删除会产生这种行为的异步效果吗?

我应该提一下,据我所知,容器只能由一个线程访问.我已经在文档中读到类HashMap没有"同步".



1> Tom Hawtin -..:

删除/获取和放置之间略有不同(尽管我的猜测是你有线程问题).

remove/ 的参数get类型Object; 因为put它是类型K.其原因之前已多次说明.这意味着它有拳击问题.我甚至不会猜测规则是什么.如果一个值被装箱Byte在一个地方而一个Short在另一个地方,那么这两个对象就不能相等.

List.remove(int)和有一个类似的问题List.remove(Object).



2> Adrian Pronk..:

我相信,每一次你检查你肯定使用该项目的存在shortShort argumentMap.get()Map.contains()

这些方法采用Object参数,因此如果您传递它们int,它将被转换为a Integer并且永远不会匹配Map中的任何项目,因为它们都将具有Short键.

推荐阅读
手机用户2502851955
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有