ArrayList的Java的ArrayList的 [英] Java ArrayList of ArrayList

查看:100
本文介绍了ArrayList的Java的ArrayList的的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

以下code输出

  [100,200,300],[100,200,300]。

不过,我想到的是

  [100,200,300],[100,200],

我在哪里错了?

 公共静态无效的主要(字串[] args){
    ArrayList的< ArrayList的<整数GT;>外=新的ArrayList< ArrayList的<整数GT;>();
    ArrayList的<整数GT;内部=新的ArrayList<整数GT;();    inner.add(100);
    inner.add(200);    outer.add(内);
    outer.add(内);    outer.get(0)。新增(300);    的System.out.println(外);}


解决方案

您添加到相同的内的ArrayList 引用两次外部列表。因此,当你改变了内部列表(通过添加300),你看到它在既内部名单(当实际上有一个为两个引用存储在外部列表只是一个内部列表)。

要得到你想要的结果,你应该创建一个新的内部列表:

 公共静态无效的主要(字串[] args){
    ArrayList的< ArrayList的<整数GT;>外=新的ArrayList< ArrayList的<整数GT;>();
    ArrayList的<整数GT;内部=新的ArrayList<整数GT;();    inner.add(100);
    inner.add(200);
    outer.add(内); //添加一个列表
    内部=新的ArrayList<整数GT;(内); //创建具有相同的内容作为新的内部列表
                                           //原来的内部列表
    outer.add(内); //添加第二个列表    outer.get(0)。新增(300); //改变只有第一个内部列表    的System.out.println(外);
}

The following code outputs

[[100, 200, 300], [100, 200, 300]]. 

However, what I expect is

[[100, 200, 300], [100, 200]], 

Where am I wrong?

public static void main(String[] args) {
    ArrayList<ArrayList<Integer>> outer = new ArrayList<ArrayList<Integer>>();
    ArrayList<Integer> inner = new ArrayList<Integer>();        

    inner.add(100);     
    inner.add(200);

    outer.add(inner);
    outer.add(inner);

    outer.get(0).add(300);

    System.out.println(outer);

}

解决方案

You are adding a reference to the same inner ArrayList twice to the outer list. Therefore, when you are changing the inner list (by adding 300), you see it in "both" inner lists (when actually there's just one inner list for which two references are stored in the outer list).

To get your desired result, you should create a new inner list :

public static void main(String[] args) {
    ArrayList<ArrayList<Integer>> outer = new ArrayList<ArrayList<Integer>>();
    ArrayList<Integer> inner = new ArrayList<Integer>();        

    inner.add(100);     
    inner.add(200);
    outer.add(inner); // add first list
    inner = new ArrayList<Integer>(inner); // create a new inner list that has the same content as  
                                           // the original inner list
    outer.add(inner); // add second list

    outer.get(0).add(300); // changes only the first inner list

    System.out.println(outer);
}

这篇关于ArrayList的Java的ArrayList的的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆