要向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自己去做。个人觉得代码简洁了很多。
欢迎关注博主个人微信公众号~~~

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

被折叠的 条评论
为什么被折叠?



