zoukankan      html  css  js  c++  java
  • ArrayList添加新元素的覆盖问题

    首先,看一个代码段:

    1. ArrayList<ArrayList<String>> list = new ArrayList<ArrayList<String>>();
    2. ArrayList<String> str = new ArrayList<String>();
    3 . for(int i = 0;i<5;i++){
    4.   str.add(i+"");
    5.   list.add(str);
    6.   System.out.println(list);
    7. }
    8.   System.out.println(list);

    期望的输出应该为:[[0], [0, 1], [0, 1, 2], [0, 1, 2, 3], [0, 1, 2, 3, 4]]

    但实际的输出为:[[0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4]]

    为什么会出现这种情况呢?

    这是因为ArrayList的add()方法在添加的是对象的引用,所以在这里for循环中每次添加的是同一个引用,每添加一次的时候,实际上在增加一个该对象引用的同时,更新了之前添加的元素(覆盖了之前添加的元素),所以和期望出现的不一致。

    解决方法:

    在循环中,new一个新的引用,指向和想添加引用指向的内容一样,这样每次添加的引用也就不相同了,也不会出现覆盖的情况了。针对上面的代码来说,只需将第5行修改为:

     ArrayList<String> t_str = new ArrayList<String>(str);
     list.add(t_str);

  • 相关阅读:
    操作系统_3:linux教程列表
    MongoEngine 查询语法
    Spark_1:教程索引
    软件需求十步走之阅读笔记03
    软件需求十步走之阅读笔记02
    软件需求十步走之阅读笔记01
    暑期学习四
    暑期学习三
    暑期学习二
    暑期学习一
  • 原文地址:https://www.cnblogs.com/alavender/p/5827823.html
Copyright © 2011-2022 走看看