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()方法。它会处理所有事情。(如果不维护插入顺序)