Java 从具有非连续索引的列表创建子列表

Java 从具有非连续索引的列表创建子列表,java,android,Java,Android,在Java中,我希望对列表使用clear方法,以便从子列表中清除的项目也从原始列表中删除。有没有办法在索引不连续的情况下创建子列表,以便我仍然可以使用clear方法从原始列表中删除项目?没有。在子列表上调用clear将从原始列表中删除元素,但也会更新索引 如果要保留索引,而不是使用.clear,则可以使用.seti,null-这将在列表中保留空插槽。迭代时只需小心。您可以做的另一件事是使用一个映射,其中Integer是您的索引。这样,您将负责管理索引 更新:如果要删除特定元素而不是子列表,只需调

在Java中,我希望对列表使用clear方法,以便从子列表中清除的项目也从原始列表中删除。有没有办法在索引不连续的情况下创建子列表,以便我仍然可以使用clear方法从原始列表中删除项目?

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

如果要保留索引,而不是使用.clear,则可以使用.seti,null-这将在列表中保留空插槽。迭代时只需小心。您可以做的另一件事是使用一个映射,其中Integer是您的索引。这样,您将负责管理索引

更新:如果要删除特定元素而不是子列表,只需调用.removeindex即可。默认列表实现都不支持此行为。您可以覆盖ArrayList并支持清除、删除等操作。。这将返回并调用父列表上的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);
        }
    }
}

列表的某些实现不允许空元素吗?所以seti,null将抛出exceptionArrayList,LinkedList允许null。当然,其他一些实现可以抛出异常,但这不是问题所在rule@Bozho,我不介意索引是否更新。例如,我试图做的是,获取列表的第一个和第三个元素,并用它创建一个子列表,我可以使用clear on。对于sublist方法,它只允许您定义一个范围。有什么想法吗?也许我不明白你的答案是的,这是一个范围。但是,如果要删除单个元素,请使用.removei查看updated@bohzho,是否要首先从索引生成子列表?我希望这样做的原因是,在删除之前,我希望保留子列表以进行其他操作。谢谢!