您的位置:首页 > 编程语言 > Java开发

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

2017-11-08 10:10 375 查看
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);   

       ...   

   }   

   内部不锁定,    效率最高,    但是当写多线程时要考虑并发操作的问题。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: