【发布时间】:2014-03-05 04:19:12
【问题描述】:
我有一个 DocObject 类型的对象,其中包含一个称为子对象的 DocObjects 数组列表,每个子对象本身可能包含也可能不包含子对象。我正在为此对象编写一个名为 replace() 的函数,该函数需要搜索一个子对象,如果 DocObject 包含该子对象,则应将子对象替换为 newObj。我环顾了该网站并搜索了谷歌,但我没有看到任何工作。下面的代码显示了我尝试过的内容:
public void replace(DocObject oldObj, DocObject newObj) {
for (DocObject child : children ) {
if (child == oldObj) {
child = newObj;
}
}
}
还有这个(这会导致溢出异常):
public void replace(DocObject oldObj, DocObject newObj) {
if (children.indexOf(oldObj) != -1)
children.set(children.indexOf(oldObj), newObj);
for (DocObject child : children)
child.replace(oldObj, newObj);
}
然而,这并没有取代孩子,我检查了 if 语句是否正常工作并且它的条件满足。如何将 oldObj 替换为 newObj?
【问题讨论】:
-
为什么需要循环开始?为什么不能直接使用
List#indexOf?可以使用类似while (children.indexOf(oldObj) != -1) {...}
标签: java arraylist replace indexof