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



  1. 1、List中添加list
  2. public class TestList {
  3. public static void main(String[] args) {
  4. List <List<Integer>> vecvecRes = new ArrayList <List<Integer>>();
  5. for (int i = 0; i < 10; i++) {
  6. List< Integer> list = new ArrayList <Integer>();
  7. for (int j = 0; j <= 5; j++) {
  8. list.add(j);
  9. }
  10. vecvecRes.add(list);
  11. }
  12. for(List<Integer> subList : vecvecRes){
  13. System.out.println(subList);
  14. }
  15. }
  16. }

结果如下:

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

2、Map中添加list

  1. public static void main(String[] args) {
  2. Map <Integer , List<Integer>> map = new HashMap <Integer , List<Integer>>();
  3. for(int i = 0; i < 10; i++){
  4. List< Integer> list = new ArrayList <Integer>();
  5. for(int j = 0; j < 10; j++){
  6. list.add(j);
  7. }
  8. map.put(i, list);
  9. }
  10. for(Integer it : map.keySet()){
  11. System.out.println(it + ":" + map.get(it));
  12. }
  13. }

结果如下:

  1. 0:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
  2. 1:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
  3. 2:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
  4. 3:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
  5. 4:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
  6. 5:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
  7. 6:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
  8. 7:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
  9. 8:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
  10. 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);   
       ...   
   }   
   内部不锁定,    效率最高,    但是当写多线程时要考虑并发操作的问题。
  1. 1、List中添加list
  2. public class TestList {
  3. public static void main(String[] args) {
  4. List <List<Integer>> vecvecRes = new ArrayList <List<Integer>>();
  5. for (int i = 0; i < 10; i++) {
  6. List< Integer> list = new ArrayList <Integer>();
  7. for (int j = 0; j <= 5; j++) {
  8. list.add(j);
  9. }
  10. vecvecRes.add(list);
  11. }
  12. for(List<Integer> subList : vecvecRes){
  13. System.out.println(subList);
  14. }
  15. }
  16. }

结果如下:

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

2、Map中添加list

  1. public static void main(String[] args) {
  2. Map <Integer , List<Integer>> map = new HashMap <Integer , List<Integer>>();
  3. for(int i = 0; i < 10; i++){
  4. List< Integer> list = new ArrayList <Integer>();
  5. for(int j = 0; j < 10; j++){
  6. list.add(j);
  7. }
  8. map.put(i, list);
  9. }
  10. for(Integer it : map.keySet()){
  11. System.out.println(it + ":" + map.get(it));
  12. }
  13. }

结果如下:

  1. 0:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
  2. 1:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
  3. 2:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
  4. 3:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
  5. 4:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
  6. 5:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
  7. 6:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
  8. 7:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
  9. 8:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
  10. 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);   
       ...   
   }   
   内部不锁定,    效率最高,    但是当写多线程时要考虑并发操作的问题。

猜你喜欢

转载自blog.csdn.net/xinzi11243094/article/details/80890211