subList

来源:互联网 发布:短信恢复软件免费版 编辑:程序博客网 时间:2024/06/06 00:40
public List<E> subList(int fromIndex,
                      
int toIndex)返回列表中指定的 fromIndex(包括 )和 toIndex(不包括)之间的部分视图。(如果 fromIndex 和 toIndex 相等,则返回的列表为空)。返回的列表由此列表支持,因此返回列表中的非结构性更改将反映在此列表中,反之亦然。返回的列表支持此列表支持的所有可选列表操作。
此方法省去了显式范围操作(此操作通常针对数组存在)。通过传递 subList 视图而非整个列表,期望列表的任何操作可用作范围操作。例如,下面的语句从列表中移除了元素的范围:

            list.subList(from, to).clear();
可以对 indexOf 和 lastIndexOf 构造类似的语句,而且 Collections 类中的所有算法都可以应用于 subList。
如果支持列表(即此列表)通过任何其他方式(而不是通过返回的列表)从结构上修改,则此方法返回的列表语义将变为未定义(从结构上修改是指更改列表的大小,或者以其他方式打乱列表,使正在进行的迭代产生错误的结果)。

此实现返回一个子类化 AbstractList 的列表。子类在
private 字段中存储底层实现列表中 subList 的偏移量、subList 的大小(随其生存期变化)以及底层实现列表的预期 modCount 值。子类有两个变体,其中一个实现 RandomAccess。如果此列表实现 RandomAccess,则返回的列表将是实现 RandomAccess 的子类实例。

子类的 set(
int, E)、get(int)、add(int, E)、remove(int)、addAll(int, Collection) 和 removeRange(int, int) 方法在对索引进行边界检查和调整偏移量之后,都委托给底层实现抽象列表上的相应方法。addAll(Collection c) 方法返回 addAll(size, c)。

listIterator(
int) 方法返回底层实现列表的列表迭代器上的“包装器对象”,使用底层实现列表上的相应方法可创建该迭代器。iterator 方法返回 listIterator(),size 方法返回子类的 size 字段。

所有方法都将首先检查底层实现列表的实际 modCount 是否与其预期的值相等,并且在不相等时将抛出 ConcurrentModificationException。


指定者:
接口 List
<E> 中的 subList
参数:
fromIndex
- subList 的低端(包括)
toIndex
- subList 的高端(不包括)
返回:
列表中指定范围的视图
抛出:
IndexOutOfBoundsException
- 端点索引值超出范围 (fromIndex < 0 || toIndex > size)
IllegalArgumentException
- 端点索引顺序颠倒 (fromIndex > toIndex)