0

我有一个这种格式的树结构:

Index1
|
 --Key1
 --Value1 
Index2
|
 --Key2
 --Value2

KeyValue对象是对象的子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();

当我执行删除操作时,节点被删除但出现堆栈溢出错误。

请让我知道我哪里出错了。

4

1 回答 1

1

该错误是因为您要从 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 循环。

于 2012-01-10T14:36:19.847 回答