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

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

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

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

        for(Iterator> itr = list.iterator(); itr.hasNext();){
            for(Iterator 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的list即可。

类图如下所示:

java中向list中添加子list的另一种思路_第1张图片

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接口
class My2 implements iMy{
    List list = new ArrayList();

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

测试代码:

    public static void main(String[] args) {
        List list = new ArrayList();
        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 itr = list.iterator(); itr.hasNext();){
            itr.next().print();
        }
    }
------------------------
输出:
0
1
2
3

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

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

java中向list中添加子list的另一种思路_第2张图片

你可能感兴趣的:(java,集合,list,设计模式)