我有这种格式的树结构:
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();
当我执行remove操作时,节点被删除但是堆栈溢出错误。
请让我知道我哪里出错了。
答案 0 :(得分:1)
错误是因为您要从for循环中的列表中删除项目,即
for(int j=0; j<noOfKeys ; j++ )
{
temp.keyList.remove(j);
temp.valueList.remove(j);
}
很可能是错误的来源。
每次从列表中删除某些内容时,所有项目的相对索引值都会发生变化。 例如,temp.keylist.remove(0)将删除第0个项目,索引1处的项目将移动到索引零。现在,对于下一次迭代,j已经增加到1(但它应该是零)
尝试评论上面已经指出的代码部分,你不应该得到溢出错误(这将是你第一次检查零代码导致问题的部分)
下一步是尝试像
这样的事情temp.keyList.clear()
temp.valueList.clear()
而不是上面的for循环。