• Java SubList 类 Java subList方法 Java ArrayList$SubList 方法特点 SubList 用法


    Java SubList 类 Java subList方法 Java ArrayList$SubList 方法特点 SubList 用法

    一、概述

            在java集合中,常用ArrayList类中,若需要对 list进行截取,可以使用subList方法,进行生成 SubList的内部类,那么 ArrayList 和 内部类 ArrayList$SubList 有啥区别和关联呢?ArrayList 和 SubList 分别进行操作时候(增、删、改),对原来是 有影响变化吗?

            java.util.ArrayList.SubList 如下:

     

    二、代码示例

            1、ArrayList.subList 方法截取 测试

    1. /**
    2. * Description: subList 方法测试
    3. * @return void
    4. * @version v1.0
    5. * @author wu
    6. * @date 2022/11/14 10:43
    7. */
    8. @Test
    9. public void subListMethodTest() throws Exception {
    10. final ArrayList srcList = Lists.newArrayList("1", "2", "3", "4", "5", "6", "7", "8", "9", "10");
    11. final List subList = srcList.subList(2, 5);
    12. System.out.println("srcList :" + srcList);
    13. System.out.println("subList :" + subList);
    14. }

            1.1、输出结果:

    1. srcList :[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
    2. subList :[3, 4, 5]

            1.2、根据输出结果可知:根据索引截取,前闭后开 [startIndex,endIndex) ;

     

    2、srcList 进行 增删改 操作测试

    1. @Test
    2. public void srcListTest() throws Exception {
    3. final ArrayList srcList = Lists.newArrayList("1", "2", "3", "4", "5", "6", "7", "8", "9", "10");
    4. final List subList = srcList.subList(2, 5);
    5. System.out.println("srcList :" + srcList);
    6. System.out.println("subList :" + subList);
    7. /**
    8. * 添加和删除,会触发 ConcurrentModificationException 异常
    9. * 原因: 会修改 modCount 属性
    10. */
    11. srcList.add("333");
    12. System.out.println("srcList add :" + srcList);
    13. // System.out.println("subList :" + subList);
    14. // srcList.remove("3");
    15. // System.out.println("srcList remove :" + srcList);
    16. // System.out.println("subList :" + subList);
    17. /**
    18. * 修改是正常操作,不会修改 modCount 属性 ;
    19. * srcList 修改后, subList 会同步修改
    20. */
    21. // srcList.set(6,"666");
    22. // srcList.set(3,"333");
    23. // System.out.println("srcList update :" + srcList);
    24. // System.out.println("subList :" + subList);
    25. }

            2.1、 输出结果,测试过程略。

            3、对 subList 进行 增删改 操作测试

    1. @Test
    2. public void subListTest() throws Exception {
    3. final ArrayList srcList = Lists.newArrayList("1", "2", "3", "4", "5", "6", "7", "8", "9", "10");
    4. final List subList = srcList.subList(2, 5);
    5. System.out.println("srcList :" + srcList);
    6. System.out.println("subList :" + subList);
    7. subList.add("101");
    8. // System.out.println("srcList :" + srcList);
    9. // System.out.println("subList add:" + subList);
    10. // subList.remove("3");
    11. // System.out.println("srcList :" + srcList);
    12. // System.out.println("subList remove:" + subList);
    13. subList.set(0, "333");
    14. System.out.println("srcList :" + srcList);
    15. System.out.println("subList update:" + subList);
    16. }

            3.1、 输出结果,测试过程略。

    三、总结

            1、java.util.ArrayList#subList 方法,特点如下:

    • 根据索引截取,取值区间是:前闭后开
    • 生成的 ArrayList的内部类 SubList

            2、srcList.subList() 截取后,会同时存在 srcList 和 subList 2个List对象

    • srcList: 添加、删除:再使用subList 会触发异常 ConcurrentModificationException;修改操作: subList 同步变化
    • subList:添加、修改、删除 --- srcList 会同步变化

            上述规则,请自行执行【二-代码示例】中的代码,进行验证。

            3、subList 方法和 java.lang.String#substring 方法,类似的,截取规则是一样的

    1. String s = "12345678910";
    2. final String substring = s.substring(2, 5);
    3. System.out.println("substring=" + substring);
    4. //输出结果:substring=345

    更多的有关 java list 集合文章:

    https://thinkcode.blog.csdn.net/article/details/126111603

    https://thinkcode.blog.csdn.net/article/details/126111838

    https://thinkcode.blog.csdn.net/article/details/127629014

    https://thinkcode.blog.csdn.net/article/details/127629841

  • 相关阅读:
    你见过哪些实用到爆的 Java 代码技巧?
    每日方法分享:图片文件太大怎么压缩变小
    vtk对二维图像构造三维
    Java中 “% “与 “/“有什么不同之处呢?
    视频暂停发送逻辑
    【leetcode】【剑指offer Ⅱ】062. 实现前缀树
    Nestjs模块机制的概念和实现原理
    Spring Boot + Canal 实现数据库实时监控
    基于ssm的医药进出口交易系统设计与实现-计算机毕业设计源码+LW文档
    HFS 快速搭建 http 服务器
  • 原文地址:https://blog.csdn.net/HaHa_Sir/article/details/127843956