Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 覆盖Arraylist中的现有对象_Java_Arraylist - Fatal编程技术网

Java 覆盖Arraylist中的现有对象

Java 覆盖Arraylist中的现有对象,java,arraylist,Java,Arraylist,我有一个带有行、列和值变量的对象DataEntry,我正在尝试将一个新对象添加到ArrayList,除非已经有一个对象具有相同的行和列值,然后我立即用一个新值覆盖值 public void set(int row, int column, double val) { DataEntry temp = new DataEntry(row, column, val); for (int i = 0; i < data.size(); i++)

我有一个带有行、列和值变量的对象
DataEntry
,我正在尝试将一个新对象添加到ArrayList,除非已经有一个对象具有相同的行和列值,然后我立即用一个新值覆盖

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);
            }
}
public void set(int行、int列、双val){
DataEntry temp=新数据项(行、列、值);
对于(int i=0;i
它没有正确设置值,我认为这与
data.get(i).getRow()有关。


感谢您提供的任何帮助

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

相反,您应该做的是在找到匹配的
i
时从方法返回,否则继续。如果循环结束时没有找到匹配的索引,请将
temp
添加到
数据中:

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);
}
public void set(int行、int列、双val){
DataEntry temp=新数据项(行、列、值);
对于(int i=0;i
您的代码片段中有一个bug。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);
    }
}
public void set(int行、int列、双val){
布尔值isFound=false;
DataEntry temp=新数据项(行、列、值);
对于(int i=0;i
在DataEntry类中实现和方法,然后使用list方法检查entry对象的存在。

我认为这与数据有关。get(i).getRow()-也许你是对的,但你为什么这么认为?我认为如果你使用
映射,你会更好(其中
有变量
)。这样你就可以使用
。包含
。放置
,而不是循环
数组列表
@ScaryWombat,我认为是在数据。获取(i)它只返回i处的值,而不是Row@Stefan我不知道映射是什么?为什么不在DataEntry类中使用HasSet和overide hashcode()和equals()方法。它会处理所有事情。(如果不维护插入顺序)