我有一个递归函数,它需要创建一个由特殊对象组成的数组......
我的自定义对象是从此类填充的:
public class CategoryItem {
boolean hasSubCategories = false;
ArrayList<CategoryItem> subs;
ArrayList<Integer> positions;
String categoryName, categoryId;
// They have setter and getter methods
}
这是我的递归函数:
public ArrayList<CategoryItem> GetLists(ArrayList<Integer> positions, int to) {
ArrayList<CategoryItem> items = new ArrayList<CategoryItem>();
for(int i = 0; i < to; i++) {
CategoryItem item = new CategoryItem();
item.setHasSubCategories(RandomBool());
item.setCategoryName("Category " + i);
item.setCategoryId(RandomId());
ArrayList<Integer> pos = positions;
pos.add(i);
Log.d(LOG, "positions: " + positions);
Log.d(LOG, "pos: " + pos);
item.setPositions(pos);
if(item.isHasSubCategories()) {
item.setSubs(GetLists(item.getPositions(), i));
}
items.add(item);
}
return items;
}
在这个函数中,RandomBool() 方法随机返回真/假……而 RandomId() 也不重要……
问题出在“位置”数组上。我想让每个项目都有特定的位置数组,例如:
第一步,每个项目需要有:[0]、[1]、[2]、[3] ...
对于下一步,假设我们选择了位置 3:[3,0], [3,1], [3,2]
但是我发现,当我将一个项目添加到 pos 数组时,我暂时分配它以不更改递归函数上的原始项目,它也被添加到原来的位置数组中。所以第一步的结果就像:每个项目的 [0,1,2,3]。
日志就像:
positions: []
pos: []
positions: [0]
pos: [0]
positions: [0, 1]
pos: [0, 1]
positions: [0, 1, 2]
pos: [0, 1, 2]
positions: [0, 1, 2, 0]
pos: [0, 1, 2, 0]
positions: [0, 1, 2, 0, 1]
pos: [0, 1, 2, 0, 1]
如何防止这种情况并使其发挥作用?问题出在哪里?任何帮助表示赞赏。谢谢...