我有一个这种格式的树结构:
Index1
|
--Key1
--Value1
Index2
|
--Key2
--Value2
Key
和 Value
对象是 Index
对象的子对象,树中没有索引对象。
我正在维护 Index
对象 (indexList
)、Key
对象 (keyList
) 和Value
对象 (valueList
)。
viewer
是 TreeViewer
的对象。
我的目标是删除 Index 对象,负责此操作的代码是:
String indexName = text.getText();
for(int i =0; i< model.indexList.size(); i++)
{
if(model.indexList.get(i).getName().equals(indexName))
{
Index temp = model.indexList.get(i);
int noOfKeys = temp.keyList.size();
int noOfValues = temp.valueList.size();
for(int j=0; j<noOfKeys ; j++ )
{
temp.keyList.remove(j);
temp.valueList.remove(j);
}
model.indexList.remove(i);
break;
}
}
viewer.refresh();
当我执行删除操作时,节点被删除,但出现堆栈溢出错误。
请告诉我我哪里出错了。
最佳答案
该错误是因为您正在 for 循环中从列表中删除项目,即
for(int j=0; j<noOfKeys ; j++ )
{
temp.keyList.remove(j);
temp.valueList.remove(j);
}
很可能是错误的根源。
每次从列表中删除某些内容时,所有项目的相对索引值都会发生变化。 例如 temp.keylist.remove(0) 将删除第零个项目,索引 1 处的项目将移动到索引零。现在,对于下一次迭代,j 已经增加到 1(但它应该为零)
尝试注释上面我指出的代码部分,您不应该收到溢出错误(这将是您第一次检查导致问题的代码部分为零)
下一步是尝试类似的事情
temp.keyList.clear()
temp.valueList.clear()
而不是上面的 for 循环。
关于java - 删除树的节点时出现堆栈溢出错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8802413/