Java java.util.List.subList 详解

subString() 和 subList()名字差不多,很多的人可能就直接顾名思义,照着subString()的用法来使用subList(),这里先画一下重点:subList()返回的列表的幕后就是原列表,因此,对返回的列表的修改都会反应到原列表中,反之亦然。

List subList(int fromIndex,int toIndex);

它返回的是原来List的 [fromIndex,toIndex) 部分的“视图”。(之所以说是“视图”,是因为返回的List并不是一个新的List,他的幕后仍旧是原List)。

代码:


   public static void main (String[] args){
        List<String> stringList = new ArrayList<String>();
        Collections.addAll(stringList,"A","B","C","D","E","F");
        List<String> subList = stringList.subList(1,4);
        System.out.println(subList);//输出:  [B, C, D]
        Collections.shuffle(subList);//打乱子列表顺序
        System.out.println(subList);//输出:  [C, D, B]
        System.out.println(stringList);//输出: [A, C, D, B, E, F]  ::原列表也随之发生变化
        Collections.shuffle(stringList);//打乱原列表顺序
        System.out.println(stringList); //输出: [E, B, A, F, C, D]
        System.out.println(subList);//输出: [B, A, F] ::子列表也随之发生变化
        subList.add("G");//增加子列表长度
        System.out.println(subList); //输出:  [B, A, F, G]
        System.out.println(stringList);//输出: [E, B, A, F, G, C, D] ::原列表也随之发生变化
        stringList.add("H");//增加原列表长度
        //System.out.println(subList);//输出: 编译报错,原列表大小发生变化,子列表将无法使用。
        System.out.println(stringList);//输出: [E, B, A, F, G, C, D, H]
    }
    

运行结果:

代码运行结果
结论:

  1. 子列表内容发生变化,原列表也随之发生变化。
  2. 子列表大小发生变化,原列表也随之发生变化。
  3. 原列表内容发生变化,子列表也随之发生变化。
  4. 原列表大小发生变化,子列表将不可用。

拓展:

如何删除一个List的某个区段?

可利用subList()的这个特性,如:

list.subList(fromIndex,toIndex).clear();
如何把一个List分割成两个(或数个)?

同理:

List sub = one.subList(fromIndex,toIndex);
List two = new XxxList(sub);
sub.clear();
发布了16 篇原创文章 · 获赞 58 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_42808551/article/details/87866585