java中向list中添加子list的另一种思路

本文介绍了一种改进的向列表中添加子列表的方法,通过定义接口和类来简化操作过程,使得添加单个元素或子列表更为简洁高效。

要向list中添加子list,最直观的思路就是list嵌套list。示例代码如下:

    @org.junit.Test
    public void testList(){
        List<ArrayList<Integer>> list = new ArrayList<ArrayList<Integer>>();
        ArrayList<Integer> subList1 = new ArrayList<Integer>();
        subList1.add(11);
        subList1.add(12);
        subList1.add(13);
        list.add(subList1);

        ArrayList<Integer> subList2 = new ArrayList<Integer>();
        subList2.add(21);
        subList2.add(22);
        subList2.add(23);
        list.add(subList2);

        for(Iterator<ArrayList<Integer>> itr = list.iterator(); itr.hasNext();){
            for(Iterator<Integer> itr2 = itr.next().iterator(); itr2.hasNext();) {
                System.out.println(itr2.next());
            }
        }
    }
----------------- 
输出:
11
12
13
21
22
23

这种方式的缺点有二。其一,如果只想增加一个元素,也不得不将其存入一个新list后再添加到原list中。其二,在遍历list元素的时候需要用两层循环迭代,代码冗长。总之,个人觉得代码写起来比较费事。

我最近看到了一种新的思路,分享给小伙伴们。

首先抽象出一个公共接口iMy,实际的元素类型My要实现该接口。然后将List<iMy>封装到一个类中,并让该类实现iMy接口。客户端持有一个泛型为iMy的list即可。

类图如下所示:

image

示例代码如下:


interface iMy{
    void print();
}

//list的元素的实际类型
class My implements iMy{
    public My(int i){this.i = i;}
    public int i;

    public void print() {
        System.out.println(i);
    }
}

//封装List<iMy>的类,要实现iMy接口
class My2 implements iMy{
    List<iMy> list = new ArrayList<iMy>();

    public void print() {
        for(Iterator<iMy> itr = list.iterator(); itr.hasNext();){
            itr.next().print();
        }
    }
}

测试代码:

    public static void main(String[] args) {
        List<iMy> list = new ArrayList<iMy>();
        list.add(new My(0));

        My2 my2 = new My2();
        my2.list.add(new My(1));
        my2.list.add(new My(2));
        my2.list.add(new My(3));
        list.add(my2);

        for(Iterator<iMy> itr = list.iterator(); itr.hasNext();){
            itr.next().print();
        }
    }
------------------------
输出:
0
1
2
3

从测试代码中可以看到,当只需要向list中添加一个元素时,直接添加即可,不需要特别为其创建一个新的list。并且,在遍历时,只有一层遍历,对子list的遍历由子list自己去做。个人觉得代码简洁了很多。

欢迎关注博主个人微信公众号~~~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值