• 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

  • 相关阅读:
    【Spring Boot】响应JSON实现原理
    scala(day01)
    初试占比70%,计算机招生近200人,安徽理工大学考情分析
    Wireshark入门到超神-第一章-过滤器-数据包解析
    Linux网络编程-网络层IP协议
    【Android】-- Activity页面(启动和结束、生命周期、启动模式和实例)
    Python与HTTP服务交互
    <Python>PyQt5自己编写一个音乐播放器(优化版)
    BBR 带宽估计的延后累加
    MFC Windows 程序设计[222]之对话框工具状态栏(附源码)
  • 原文地址:https://blog.csdn.net/HaHa_Sir/article/details/127843956