使用非连续索引从列表创建子列表

时间:2011-11-30 19:26:30

标签: java android

在Java中,我想在列表中使用clear()方法,以便从子列表中清除的项目也从原始列表中删除。有没有办法创建索引不连续的子列表,这样我仍然可以使用clear()方法从原始列表中删除项目?

2 个答案:

答案 0 :(得分:0)

不。在子列表上调用clear()会从原始列表中删除元素,但也会更新索引。

如果您想保留索引,而不是使用.clear(),则可以使用.set(i, null) - 这将在列表中保留“空插槽”。迭代时你只需要小心。您可以做的另一件事是使用Map<Integer, Foo>,其中Integer是您的索引。这样你就可以负责管理指数。

更新:如果您要删除特定元素而非子列表,只需调用.remove(index)

答案 1 :(得分:0)

默认List实现都不支持此行为。您可以覆盖ArrayList并支持clear()remove()等。转身并在父列表上调用remove()

类似于以下示例代码。但要保持与父母同步,需要做很多工作。如果你可以限制你需要支持的电话数量,那么当然会更容易。

public class SubArrayList<T> extends ArrayList<T> {
    public SubArrayList(List<T> parentList, int start, int end) {
        ...;
    }

    @Override
    public T remove(int index) {
        T removed = super.remove(index);
        // should not remove by position because position in parent might change
        parentList.remove(removed);
        return removed;
    }

    @Override
    public T remove(Object obj) {
        if (super.remove(obj)) {
            parentList.remove(obj);
        }
    }
}