Java列表

时间:2015-08-20 01:16:08

标签: java list

我正在编写一个包含字符串列表的列表。

这就是它的样子:

List<List<String>> WPL = new ArrayList<List<String>>();
List<String> WP = new ArrayList<String>();

WP.add("A");
WP.add("B");
WPL.add(WP);

WP.clear();

WP.add("C");
WP.add("D");
WPL.add(WP);

for(List<String> a : WPL) {
    System.out.println(a.indexOf(a));
    for (String i : a)
    {
        System.out.println(i);
    }

}

(列表将在稍后自动生成并且更长时间)我得到的所有响应是

-1
C
D
-1
C
D

我需要的是

0
A
B
1
C
D

我做错了什么?

4 个答案:

答案 0 :(得分:2)

WPL.add(WP)

这增加了对列表WP的引用。它没有制作WP的副本。因此,当您清除WP时,清除WPL中列表的内容。

答案 1 :(得分:2)

当您列出清单时,它不会复制值 - 它会将参考复制到源列表。所以,当你

    WP.add("A");
    WP.add("B");
    WPL.add(WP);    

    WP.clear();  //this also clears the values in WPL since WPL doesn't store A and B, it stores a reference to WP.

    WP.add("C");
    WP.add("D");
    WPL.add(WP);

要解决此问题,我建议为需要添加到其中的每个项目创建一个新列表。但也要注意记住,对原始源列表的任何更改也将反映在WPL中。您也可以将WP设置为ArrayList的新实例(如果需要引用回旧的ArrayList,可以通过WPL访问它,因为WPL实际上存储了对它的引用而不是直接存储的值)。 / p>

    List<List<String>> WPL = new ArrayList<List<String>>();
    List<String> WP = new ArrayList<String>();

    WP.add("A");
    WP.add("B");
    WPL.add(WP);

    WP = new ArrayList<String>();

    WP.add("C");
    WP.add("D");
    WPL.add(WP);

    for(List<String> a : WPL) {
        System.out.println(a.indexOf(a));

        for (String i : a)
        {
            System.out.println(i);
        }

    }

这是一个很好的视频,它可以描述参考类型和价值类型之间的区别,如果你想了解更多关于发生了什么的事情(我建议这样做......这是你可能会遇到的话题再来一次)。

https://www.youtube.com/watch?v=eRfvgSvf-mM

答案 2 :(得分:0)

Java适用于参考

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

    WP.add("A");
    WP.add("B");
    WPL.add(WP);

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

    WP2.add("C");
    WP2.add("D");
    WPL.add(WP2);

正在清除&#39; A&#39;和&#39; B&#39;已经添加了。你需要做的是

module.exports = function(defaults) {
  var app = new EmberApp(defaults, {
  });

  app.import('bower_components/ladda/dist/ladda-themeless.min.css');
  app.import('bower_components/ladda/dist/spin.min.js');
  app.import('bower_components/ladda/dist/ladda.min.js');

  return app.toTree();
};

答案 3 :(得分:0)

只是为了踢,这是非常短的版本,修复你的打印循环

List<List<String>> WPL = Arrays.asList(Arrays.asList("A", "B"),
                                       Arrays.asList("C", "D"));
for (int i = 0; i < WPL.size(); i++) {
    System.out.println(i);
    for (String s : WPL.get(i))
        System.out.println(s);
}

输出:

0
A
B
1
C
D