List<E> subList使用

本文深入探讨了Java中List的subList()方法,详细解释了其行为特性,包括视图概念、非结构性与结构性修改的影响,以及如何利用此方法进行高效的数据截取和分页操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近突然看到截取List的这个方法,正好项目中进行假分页可以专用道这个方法,下面来总结一下。

List<E> subList(int formIndex,int toIndex);

一、注意:

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

2、父子list做的非结构性修改(不涉及到list的大小改变的修改):

      都会影响到彼此

3、结构性修改(改变了list大小的修改):

      子list的所有操作都会反映到父list上。但父list的修改将会导致返回的子list失效。

4、删除list中的某段数据:list.subList(from,to).clear()

二、实践:

2.1非结构性修改

 List<String> list = new ArrayList<>();
        list.add("a");

        // 使用构造器创建一个包含list的列表list1
        List<String> list1 = new ArrayList(list);

        // 使用subList生成与list相同的列表list2
        List<String> list2 = list.subList(0, list.size());

        list2.set(0,"将a修改后");
//        list.set(0,"将a修改后");

        System.out.println(list.equals(list1));
        System.out.println(list.equals(list2));

2.2结构性修改

2.2.1结构性修改-子list操作

   List<String> list = new ArrayList<>();
        list.add("a");

        // 使用构造器创建一个包含list的列表list1
        List<String> list1 = new ArrayList(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

2.2.2结构性修改-父list操作(会报错)

   List<String> list = new ArrayList<>();
        list.add("a");

        // 使用构造器创建一个包含list的列表list1
        List<String> list1 = new ArrayList(list);

        // 使用subList生成与list相同的列表list2
        List<String> list2 = list.subList(0, list.size());

        list.add("b");

        System.out.println(list.equals(list1));
        System.out.println(list.equals(list2));

 

项目中的应用:分页问题

 

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值