覆盖Arraylist

时间:2017-10-25 06:40:09

标签: java arraylist

我有对象DataEntry包含行,列和值变量,我试图将新对象添加到ArrayList,除非已经有一个具有相同行和列值的对象,然后我覆盖{ {1}}现在有一个新值,我有这个:

value

没有正确设置值,我认为它与public void set(int row, int column, double val) { DataEntry temp = new DataEntry(row, column, val); for (int i = 0; i < data.size(); i++) if (data.get(i).getRow() == row && data.get(i).getColumn() == column) data.set(i, temp); else { data.add(temp); } }

有关

感谢任何帮助

3 个答案:

答案 0 :(得分:4)

这是因为无论i中的data项是否与行和列匹配,您都会继续搜索。

您应该做的是在找到匹配的i时从方法返回,否则继续。如果循环结束而未找到匹配的索引,请将temp添加到data

public void set(int row, int column, double val) {

    DataEntry temp = new DataEntry(row, column, val);
    for (int i = 0; i < data.size(); i++)
        if (data.get(i).getRow() == row && data.get(i).getColumn() == column) {
            data.set(i, temp);
            return;
        }
    }
    data.add(temp);
}

答案 1 :(得分:2)

您的代码段中有错误。 else循环应该在循环之后执行。

public void set(int row, int column, double val) {
    boolean isFound = false;
    DataEntry temp = new DataEntry(row, column, val);
    for (int i = 0; i < data.size(); i++) {
        DataEntry current = data.get(i);
        if (current.getRow() == row && current.getColumn() == column){
            data.set(i, temp);
            isFound = true;
            break;
      }
    }

    if(!isFound) {
        data.add(temp);
    }
}

答案 2 :(得分:2)

在DataEntry类中实现equalshashCode方法,然后使用list的contains方法检查条目对象是否存在。