我有一个方法test(),其中我试图将两个LinkedHashMap相互比较,并通过删除键/值对(如果在两个LHM中都找到)来修改其中一个映射的内容。运行此方法时,我不断收到ConcurrentModificationException。我知道为什么会收到异常(因为我正在尝试修改正在循环的列表)。我不确定如何进行此操作。到目前为止,我有以下代码:
private void test() { LinkedHashMap<String, BigDecimal>testBene = new LinkedHashMap<String, BigDecimal>(); LinkedHashMap<String, BigDecimal>testDly = new LinkedHashMap<String, BigDecimal>(); testBene.put("ABCDEFG", BigDecimal.ZERO); testBene.put("BCDEFGH", BigDecimal.ONE); testBene.put("CDEFGHI", BigDecimal.TEN); testDly.put("BCDEFGH", BigDecimal.ONE); testDly.put("Foo", BigDecimal.TEN); testDly.put("Bar", BigDecimal.TEN); for (Entry<String, BigDecimal> beneKeySet : testBene.entrySet()) { if (testDly.containsKey(beneKeySet.getKey())) { for (Entry<String, BigDecimal> dlyKeySet : testDly.entrySet()) { if ((dlyKeySet.getKey().equals(beneKeySet.getKey())) && dlyKeySet.getValue().equals(beneKeySet.getValue())) { testBene.remove(dlyKeySet.getKey()); } } } } }
您可以使用迭代器:
for (Iterator<Entry<String, BigDecimal>> it = testBene.entrySet().iterator(); it.hasNext();) { Entry<String, BigDecimal> beneKeySet = it.next(); if (testDly.containsKey(beneKeySet.getKey())) { for (Entry<String, BigDecimal> dlyKeySet : testDly.entrySet()) { if ((dlyKeySet.getKey() == beneKeySet.getKey()) && dlyKeySet.getValue() == beneKeySet.getValue()) { it.remove(); } } } }