Java 集合,无法用新值覆盖旧值

标签 java collections arraylist

我有一个关于 Java 集合的问题。我迭代 Java 集合,如果 if 子句为真,我想更改集合的条目。在 if 子句主体中,新值被接受,但如果我想稍后打印整个集合,它会再次打印出具有旧值的集合。

代码如下:

public boolean checkConsumeStorageCapacity(Multimap<String, Values> mm1,   Multimap<String, Values> mm2)
{
    boolean enoughStorageCapacity = false;

     Multimap<String, Values> mmApp = mm1;

     Multimap<String, Values> mmHW = mm2;

     Collection<Values> colA = mmApp.get("Storage");
     Collection<Values> colH = mmHW.get("Memory");
for (Values vA2 : colA) {
    for (Values vH2 : colH) {

        if (vA2.getName().equals("Size") && vH2.getName().equals("Size")) {

            float StoSize = Float.parseFloat(vA2.getValue());
            float MemSize = Float.parseFloat(vH2.getValue());
            float maintainableStoSize = StoSize * maintainabilityfactor;

            if (MemSize >= maintainableStoSize) {

                MemSize -= maintainableStoSize;
                vH2.setValue(String.valueOf(MemSize));

                String s = vH2.getValue();
                System.out.println(s);

                enoughStorageCapacity = true;
                return enoughStorageCapacity;

            }
            break;
        }

    }
}

System.out.println(colH);

Values 是一个包含 3 个字符串的对象。 getter/setter 均已正确声明。打印出 s 给出正确的值,但打印出 colH 再次给出旧值。设置新值还不够吗,我还必须在集合中提交任何内容吗?

提前非常感谢。

编辑: 这里是值(value)观类,以供进一步理解。

public class Values {

private String name;
 private String type;
 private String value;

public Values(String name, String type, String value)
 {
    this.name = name; 
    this.type = type; 
    this.value = value;
}
public String getName()
 {
    return name;
 }
public String getType()
 {
    return type;
 }
public String getValue()
 {
    return value;
 }
public void setName(String name)
{
    this.name = name; 
}
public void setValue(String value)
{
    this.value = value; 
}
public void setType(String type)
{
    this.type = type; 
}

@Override
public String toString() {
    return "name=" + name + ", type=" + type + ", value=" + value;
    }

}

最佳答案

处理此类指针问题的另一种方法是在循环之前初始化第二个集合。当您迭代时,将希望保持不变的值添加到集合中,然后在 if 语句中添加更改的值/对象。这会花费更多的内存,但不会造成真正的性能损失

类似这样的事情:

list<T> originallist;
list<T> tmp = new list
for(x : originalList)
{
if(condition)
{
//do things
tmp.add(changedValue)
}
else
{
 tmp.add(x)
 }
}

关于Java 集合,无法用新值覆盖旧值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19226904/

相关文章:

java - Spring Validator : Could not autowire. 找不到 'Validator' 类型的 beans

java - 何时使用网络服务

Java - 如何检查两个 ArrayList 是否是唯一对象(即使它们具有相同的值)?

java - 根据日期属性(字符串类型)对对象列表进行排序时出现异常

java - Connect 4 Java 游戏撤消按钮

java - 将加速度计数据插入数组

java - Stomp 的 MessageMap 格式是不是完全不能用了?

java - 如何正确处理非英文字符?

java - 常见迭代器错误的解释

java - 为什么 ArrayList RandomAccess 而 ArrayDeque 不是?