ArrayList的subList方法

简介:

李说:

ArrayList的subList方法取到的是ArrayList的一段list,只是其中的一段视图。所以修改subList ,ArrayList同时会修改,因为本来就是同一个东西。

jdk文档中是这样说的:

 List<E> subList(int fromIndex, int toIndex) 
          返回列表中指定的 fromIndex(包括 )和 toIndex(不包括)之间的部分视图。


补充参考网上资料是这样说的:

1,该方法返回的是父list的一个视图,从fromIndex(包含),到toIndex(不包含)。fromIndex=toIndex 表示子list为空

2,父子list做的非结构性修改(non-structural changes)都会影响到彼此:所谓的“非结构性修改”,是指不涉及到list的大小改变的修改。相反,结构性修改,指改变了list大小的修改。

3,对于结构性修改,子list的所有操作都会反映到父list上。但父list的修改将会导致返回的子list失效。

4,tips:如何删除list中的某段数据:

list.subList(from, to).clear();


示例代码:

来自【Java每日一题】20170105,就是看到这个题目才让我知道list的这个方法我没有接触过

package ques;  
  
import java.util.ArrayList;  
import java.util.List;  
  
public class Ques0105 {  
  
    public static void main(String[] args) {  
        List<String> list = new ArrayList<String>();  
        list.add("a");  
  
        // 使用构造器创建一个包含list的列表list1  
        List<String> list1 = new ArrayList<String>(list);  
        // 使用subList生成与list相同的列表list2  
        List<String> list2 = list.subList(0, list.size());  
        list2.add("b");  
  
        System.out.println(list.equals(list1));  
        System.out.println(list.equals(list2));  
    }  
}

返回结果如下:

可以发现,list2为list的子list,当list2发生结构性修改(list2.add("b"))后,list也发生相应改变,所以返回结果为false和true

注意:

引自《阿里巴巴Java开发手册》

【强制】  ArrayList 的 subList 结果不可强转成 ArrayList ,否则会抛出 ClassCastException

异常: java . util . RandomAccessSubList cannot be cast to java . util . ArrayList ;

说明: subList 返回的是  ArrayList 的内部类  SubList ,并不是  ArrayList ,而是

ArrayList 的一个视图,对于 SubList 子列表的所有操作最终会反映到原列表上。






      本文转自建波李 51CTO博客,原文链接:http://blog.51cto.com/jianboli/1971145 ,如需转载请自行联系原作者



相关文章
|
2月前
|
存储 Java
ArrayList
ArrayList是线程不安全的,底层使用 Object[]存储数据,可以存储任何类型的对象,包括 null 值,相当于动态数组。与 Java 中的数组相比,它的容量能动态增长。 核心属性: private static final int DEFAULT_CAPACITY = 10;//默认容量 transient Object[] 存储元素的集合 private int size; 元素个数 构造方法: public ArrayList() ; public ArrayList(int initialCapacity) ; public ArrayList(Collection<?
|
3月前
|
安全 Java API
ArrayList 全面详解
关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。本文详细解析了Java集合框架中的ArrayList,包括其定义、特点、成员变量、构造函数、API、主要方法和扩容机制等。欢迎留言交流。
|
5月前
|
存储
ArrayList的使用
ArrayList的使用
28 3
|
存储 安全 Java
ArrayList引发的一系列问题
ArrayList引发的一系列问题
107 0
ArrayList引发的一系列问题
|
安全 Java
你对ArrayList了解多少?
你对ArrayList了解多少?
46 0
|
Java 测试技术 索引
深入理解ArrayList(三)
深入理解ArrayList(三)
82 0
详解ArrayList
1.数据结构 底层使用Object类型的数组实现,线程不安全,添加元素时如果内存已满则会开辟新空间,将原数组copy过去。
105 0
深入理解ArrayList(一)
深入理解ArrayList(一)
80 0
|
Java 开发者
深入理解ArrayList(二)
深入理解ArrayList(二)
88 0