java 中List包含List,如何添加多个list,Map中包含多个list,如何添加?

1、List中添加list
public class TestList {
	public static void main(String[] args) {
		List<List<Integer>> vecvecRes = new ArrayList<List<Integer>>();
		for (int i = 0; i < 10; i++) {
			List<Integer> list = new ArrayList<Integer>();
			for (int j = 0; j <= 5; j++) {
				list.add(j);
			}
		vecvecRes.add(list);
		}
		for(List<Integer> subList : vecvecRes){
			System.out.println(subList);
		}
	}
}

结果如下:

[0, 1, 2, 3, 4, 5]
[0, 1, 2, 3, 4, 5]
[0, 1, 2, 3, 4, 5]
[0, 1, 2, 3, 4, 5]
[0, 1, 2, 3, 4, 5]
[0, 1, 2, 3, 4, 5]
[0, 1, 2, 3, 4, 5]
[0, 1, 2, 3, 4, 5]
[0, 1, 2, 3, 4, 5]
[0, 1, 2, 3, 4, 5]

2、Map中添加list

public static void main(String[] args) {
		Map<Integer , List<Integer>> map = new HashMap<Integer , List<Integer>>();
		for(int i = 0; i < 10; i++){
				List<Integer> list = new ArrayList<Integer>();
				for(int j = 0; j < 10; j++){
					list.add(j);
				}
				map.put(i, list);
		}
		
		for(Integer it : map.keySet()){
			System.out.println(it + ":" + map.get(it));
		}
	}

结果如下:

0:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
1:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
2:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
3:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
4:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
5:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
6:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
7:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
8:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
9:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]


也许,您会有这样的疑问,每次都声明了List类型的list,那最后添加的不是指向的最后一个list的内容吗?

这种说法乍一听上去是对的,但仔细想想是错误的,因为每次循环声明的局部变量List<Integer> list 在每次循环完之后会被内存释放,为该循环变量分配的内存会被回收,因此,每次拿到的list都是一个新声明的list。我们可以打印哈希值来看。

9ebadac6
9ebadac6
9ebadac6
9ebadac6
9ebadac6
9ebadac6
9ebadac6
9ebadac6
9ebadac6
9ebadac6

一样的,这是为什么?????

看这篇博客吧,讲得很好:blog.csdn.net/tmdlife/article/details/51970897

至此,解决了困扰我很久的问题了。。。哈哈哈。。。

附:java中List的遍历方式:

对List的遍历有三种方式   
    
   List<String>    list    =    new    ArrayList<String>();   
   list.add("testone");   
   list.add(“testtwo”);   
   ...   
    
   第一种:   
   for(Iterator<String>    it    =    list.iterator();    it.hasNext();    )    {   
       ....   
   }   
   这种方式在循环
执行过程中会进行数据锁定,    性能稍差,    同时,如果你想在寻欢过程中去掉某个元素,只能调用it.remove方法,    不能使用list.remove方法,    否则一定出现并发访问的错误.   

    
   第二种:   
   for(String   data    :    list)    {   
       .....   
   }   
   内部调用第一种,    换汤不换药,  因此比Iterator 慢,这种循环方式还有其他限制, 不建议使用它。
    
   第三种:   
   for(int    i=0;    i<list.size();    i++)    {   
       A    a    =    list.get(i);   
       ...   
   }   
   内部不锁定,    效率最高,    但是当写多线程时要考虑并发操作的问题。


  • 5
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值