浅拷贝问题

(53条消息) ArrayList的add方法,浅拷贝_oxygen-hhh的博客-CSDN博客

描述:

    //接收大集合参数,返回小集合结果
   public static ArrayList<List<String>> smallList(List<String> bigList){
       //创建小集合存储偶数
       List<String> smallList = new ArrayList<>();

       ArrayList<List<String>> newList = new ArrayList<>();

       for (String s : bigList) {
           smallList.add(s);
           if (smallList.size() == 2) {

               newList.add(new ArrayList<>(smallList));

               smallList.clear();
          }
      }
       return newList;
  }

合并偶数集合,在List集合当中继续插入list,size>2时候清空小的集合。会把大集合全部数据清空。

原因:List的add方法,每次add的时候是吧对象的地址add到数组最后,而没有新创建对象,所以每次add以后指向的都是小的list的地址,当小list的值发生改变时侯,就会影响到大的List的值。

解决方案:浅拷贝,构造另一个引用。

  • 延申:浅拷贝和深拷贝

    • 浅拷贝:如果是基本数据类型,只拷贝值(地址不变),引用类型(地址改变),拷贝一份引用类型

    • 深拷贝:无论拷贝对象是引用类型还是基本类型,都做一份拷贝,拷贝对象的地址改变。

posted @ 2023-01-05 09:53  Z_WINTER  阅读(26)  评论(0)    收藏  举报