首先,看一个代码段:

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);

ArrayList添加新元素的覆盖问题的更多相关文章

  1. nginx添加模块 (非覆盖安装)

    nginx添加模块(非覆盖安装) 原已经安装好的nginx,现在需要添加一个未被编译安装的模块: 查看原来编译时都带了哪些参数# /usr/local/nginx/sbin/nginx -V ngin ...

  2. Python之list添加新元素、删除元素、替换元素

    Python之list添加新元素 现在,班里有3名同学: >>> L = ['Adam', 'Lisa', 'Bart'] 今天,班里转来一名新同学 Paul,如何把新同学添加到现有 ...

  3. 为 HTML 添加新元素

    你可以为 HTML 添加新的元素. 该实例向 HTML 添加的新的元素,并为该元素定义样式,元素名为 <myHero> : 实例 <!DOCTYPE html> <htm ...

  4. 用jquery添加新元素很容易,面对jquery append 动态添加的元素事件on 不起作用我们该如何解决呢?

    用jquery添加新元素很容易,面对jquery append 动态添加的元素事件on 不起作用我们该如何解决呢?on方法中要先找到原选择器(如例.info),再找到动态添加的选择器(如列.delet ...

  5. JavaScript 添加新元素

    JavaScript 添加新元素 版权声明:未经授权,严禁转载! 添加元素 创建元素 使用 JS 可以为一个已有的元素添加一个新的子元素. 第一步:创建空元素. - var elem = docume ...

  6. Python list添加新元素

    append()和insert() 添加新元素现在,班里有3名同学:>>> L = ['Adam', 'Lisa', 'Bart']今天,班里转来一名新同学 Paul,如何把新同学添 ...

  7. Js 向json对象中添加新元素

    即:var json={a:1,b:2} json.c=3  添加新元素直接使用赋值就行了

  8. 原生js动态添加新元素、删除元素方法

    1. 添加新元素 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> < ...

  9. HTML5——添加新元素 新元素 Canvas SVG MathML 黑客帝国特效

    为HTML添加新元素 添加新元素   +   该元素定义样式 <!DOCTYPE html> <html> <head> <meta charset=&quo ...

随机推荐

  1. web sql database数据存储位置

    Q1: 数据存储在哪儿? Web Storage / Web SQL Database / Indexed Database 的数据都存储在浏览器对应的用户配置文件目录(user profile di ...

  2. asp.net c#过滤html代码,净化DIV SPAN等

    public static string GetSafeHtml(string val) { if (string.IsNullOrEmpty(val)) { return string.Empty; ...

  3. redis集群报错

    写入redis集群报错:(error) MOVED 6918 解决方法:redis-cli -c -p 7001 -h 10.0.0.104

  4. 使用Kettle抽取数据时,出现中文乱码问题解决方案

    使用Kettle在不同的数据库抽取数据时,有时会出现中文乱码问题:其解决方案如下: 1.查看数据库的字符集是否是UTF-8(最常用的字符集) 2.如果数据库设置正确仍然存在中文乱码,则可能是因为有的客 ...

  5. Solr使用随笔

    1) 命令解释 curl 'localhost:8983/solr/update?commit=true' -H 'Contenttype:application/json' -d '[{" ...

  6. 如何在脚本中获取进程ID(PID)

    我想要知道运行中脚本子shell的进程id.我该如何在shell脚本中得到PID. 当我在执行shell脚本时,它会启动一个叫子shell的进程.作为主shell的子进程,子shell将shell脚本 ...

  7. java知识巩固

    1.从控制台读取一个字符: public static void main(String args[]) throws java.io.IOException{ char c=(char)System ...

  8. USACO Milking Cows

    思路: 脑抽了,一看题目,这不就是线段树么,离散化区间合并..最终发现我并不会写...于是看了下题目范围10^6...模拟水之..每个区间左端点+1,右端点-1,从左到右扫一下就行了... 代码: / ...

  9. iOS开发者证书申请过程

    真机测试前准备工作:1.苹果的MAC一台.如果你用的是***不知道可不可以,反正我没用过...一般公司都会给你配开发工具的.2.iphone手机一部.(本人纯屌丝,用的iphone4)3.开发者账号. ...

  10. <java基础学习>RE 基础语法

    public class MyFirstJavaProgram{ public static void main(String[] args ){ System.out.println("H ...