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 方法截取 测试
/*** Description: subList 方法测试* @return void* @version v1.0* @author wu* @date 2022/11/14 10:43*/
@Test
public void subListMethodTest() throws Exception {final ArrayList<String> srcList = Lists.newArrayList("1", "2", "3", "4", "5", "6", "7", "8", "9", "10");final List<String> subList = srcList.subList(2, 5);System.out.println("srcList :" + srcList);System.out.println("subList :" + subList);
}
1.1、输出结果:
srcList :[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
subList :[3, 4, 5]
1.2、根据输出结果可知:根据索引截取,前闭后开 [startIndex,endIndex) ;
2、srcList 进行 增删改 操作测试
@Testpublic void srcListTest() throws Exception {final ArrayList<String> srcList = Lists.newArrayList("1", "2", "3", "4", "5", "6", "7", "8", "9", "10");final List<String> subList = srcList.subList(2, 5);System.out.println("srcList :" + srcList);System.out.println("subList :" + subList);/*** 添加和删除,会触发 ConcurrentModificationException 异常* 原因: 会修改 modCount 属性*/srcList.add("333");System.out.println("srcList add :" + srcList);
// System.out.println("subList :" + subList);// srcList.remove("3");
// System.out.println("srcList remove :" + srcList);
// System.out.println("subList :" + subList);/*** 修改是正常操作,不会修改 modCount 属性 ;* srcList 修改后, subList 会同步修改*/
// srcList.set(6,"666");
// srcList.set(3,"333");
// System.out.println("srcList update :" + srcList);
// System.out.println("subList :" + subList);}
2.1、 输出结果,测试过程略。
3、对 subList 进行 增删改 操作测试
@Testpublic void subListTest() throws Exception {final ArrayList<String> srcList = Lists.newArrayList("1", "2", "3", "4", "5", "6", "7", "8", "9", "10");final List<String> subList = srcList.subList(2, 5);System.out.println("srcList :" + srcList);System.out.println("subList :" + subList);subList.add("101");
// System.out.println("srcList :" + srcList);
// System.out.println("subList add:" + subList);// subList.remove("3");
// System.out.println("srcList :" + srcList);
// System.out.println("subList remove:" + subList);subList.set(0, "333");System.out.println("srcList :" + srcList);System.out.println("subList update:" + subList);}
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 方法,类似的,截取规则是一样的
String s = "12345678910";
final String substring = s.substring(2, 5);
System.out.println("substring=" + substring);//输出结果: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