【发布时间】:2015-11-01 14:37:19
【问题描述】:
就像标题所说的那样。我可以在迭代其键时更改 HashTable 中对象的内部结构吗?我知道我不能更改地图本身,或者至少这样做是有风险的,但是尽管谷歌搜索,我还没有找到任何明确或简单的答案来确定是否可以更改对象本身的属性在哈希图中。我的直觉说不,因为这可能会改变哈希值,但肯定会知道。我也有兴趣在迭代它们时替换键的值。这可能吗?
如果这个问题已经回答了很多次,我们深表歉意。
简而言之,这两种方法会按预期工作吗?
public class Manager {
private Hashtable<MyClassA, BufferedImage> ht1;
private Hashtable<MyClassB, JSlider> ht2;
private Image method1() {
for(MyClassB mcb: ht2.keySet()){
mcb.calculateStuff(ht2.get(mcb).getValue());
//CalculateStuff() doesnt change anything, but if it takes long, the JSliders might be
//changed by the user or a timer, resulting in a new hashCode(), and potentially problems.
}
}
private void method2(){
for(MyClassA mca: ht1.keySet()){
mca.changeInnerStructureOfA(); //Changes the fields of the object mca.
ht1.put(mca.calculateNewImage());
}
}
【问题讨论】:
标签: java collections foreach concurrency hashmap