我有一个名为statusCountMap的Java HashMap。
呼叫大小()导致30
但是如果我手动计数的条目,这是31
这是我的TestNG的单元测试之一。下面的这些结果来自Eclipse的Display窗口(键入code - > highlight - >点击Display Results of Evaluating Selected Text)。Java HashMap的大小()能否与其实际条目的大小不同步?
statusCountMap.size() (int) 30 statusCountMap.keySet().size() (int) 30 statusCountMap.values().size() (int) 30 statusCountMap (java.util.HashMap) {40534-INACTIVE=2, 40526-INACTIVE=1, 40528-INACTIVE=1, 40492-INACTIVE=3, 40492-TOTAL=4, 40513-TOTAL=6, 40532-DRAFT=4, 40524-TOTAL=7, 40526-DRAFT=2, 40528-ACTIVE=1, 40524-DRAFT=2, 40515-ACTIVE=1, 40513-DRAFT=4, 40534-DRAFT=1, 40514-TOTAL=3, 40529-DRAFT=4, 40515-TOTAL=3, 40492-ACTIVE=1, 40528-TOTAL=4, 40514-DRAFT=2, 40526-TOTAL=3, 40524-INACTIVE=2, 40515-DRAFT=2, 40514-ACTIVE=1, 40534-TOTAL=3, 40513-ACTIVE=2, 40528-DRAFT=2, 40532-TOTAL=4, 40524-ACTIVE=3, 40529-ACTIVE=1, 40529-TOTAL=5} statusCountMap.entrySet().size() (int) 30
什么给?任何人都经历过这个?
我敢肯定statusCountMap未在这一点上进行修改。
有两种方法(让我们称它们为methodA和methodB)通过反复调用incrementCountInMap来修改statusCountMap 并发。
private void incrementCountInMap(Map map, Long id, String qualifier) { String key = id + "-" + qualifier; if (map.get(key) == null) { map.put(key, 0); } synchronized (map) { map.put(key, map.get(key).intValue() + 1); } }
methodD是我遇到问题的地方。 methodD有一个TestNG @dependsOnMethods = {“methodA”,“methodB”},所以当methodD执行时,statusCountMap已经非常静态了。 我提到这一点是因为它可能是TestNG中的一个错误。
我正在使用Sun JDK 1.6.0_24。 TestNG是testng-5.9-jdk15.jar
嗯......重读我的帖子后,是否可能是因为同步块外map.get(key)== null & map.put (键,0)这是造成这个问题?
你能显示所有的代码吗?也许一个是默认条目,尝试20个条目,看看你是否得到21 – Vladp 2011-03-12 15:14:16
你如何计数? – Erik 2011-03-12 15:14:25
我只计算了{40534-INACTIVE = 2,40526-INACTIVE = 1,40528-INACTIVE = 1,40492-INACTIVE = 3,40492-TOTAL = 4,40513-TOTAL = 6,40532-DRAFT = 4,40524-TOTAL = 7,40526-DRAFT = 2,40528-ACTIVE = 1,40524-DRAFT = 2,4515-ACTIVE = 1,40513-DRAFT = 4,40534-DRAFT = 1,40514-TOTAL = 3 ,40529-DRAFT = 4,4515-TOTAL = 3,40492-ACTIVE = 1,40528-TOTAL = 4,40514-DRAFT = 2,40526-TOTAL = 3,40524-INACTIVE = 2,4515-DRAFT = 2,44014 -ACTIVE = 1,40534-TOTAL = 3,40513-ACTIVE = 2,40528-DRAFT = 2,4532-TOTAL = 4,40524-ACTIVE = 3,40529-ACTIVE = 1,40529-TOTAL = 5} – trix 2011-03-12 15:22:09