修改集合我遍历,以及修改的映射(其由枚举对象的现有的组创建)类似下面的:优点创建迭代时的临时缓冲器和在Java
public class Dispenser {
private Map<Ingredient, Integer> availableIngredients =
new EnumMap<Ingredient, Integer>(Ingredient.class);
public void orderSandwich(SandwichType sandwichType) {
Map<Ingredient, Integer> buffer =
new EnumMap<Ingredient, Integer>(availableIngredients);
for (Map.Entry<Ingredient, Integer> entry :
sandwichType.getIngredients().entrySet()) {
Integer currentUnits = buffer.get(entry.getKey());
buffer.put(entry.getKey(), currentUnits - entry.getValue());
}
availableIngredients.clear();
availableIngredients.putAll(buffer);
}
}
我想询问在这种情况下是否需要临时的,方法本地的,缓冲区集合。我的意思是,它可以正常工作,但不确定其好处。我必须清除我的原始集合并将其替换为缓冲集合的内容,该集合基本上是循环内修改的实际映射。
因为它工作正常,没有缓冲区集合(只使用我的原始集合),我想知道是否有一种方法建议超过oter和为什么。
非常感谢您对此的最佳实践的任何建议。
你的问题基本上是,“我加2和3就是这样:2 + 3 + 2 - 3。它的工作原理,但我不清楚增加和减少3的好处。” 你真的没有解释为什么这似乎是需要在第一个地方。你为什么不直接修改availableIngredients?我假设,从“玩具程序”的外观来看,你并不关心多线程? 顺便说一下,看起来你可以从google-collections.googlecode.com中使用EnumMultiset而不是Map来获益,但是如果这是一个学校项目,我想这是无关紧要的。 – 2009-11-18 17:20:57