将项添加到多维ArrayList

时间:2012-01-02 13:23:50

标签: java arrays multidimensional-array

Hello只有几个小时的Java。 (来自Python) 我试图定义一个多维数组并用“add”方法填充它。但是,我看到了一些奇怪的结果:

List<String[]> DrawInstructions = new ArrayList<String[]>();
String[] pair = {"",""};

pair[0]="UW";
pair[1]="100";
DrawInstructions.add(pair); 

pair[0]="UM";
pair[1]="10";
DrawInstructions.add(pair);

pair[0]="UT";
pair[1]="50";
DrawInstructions.add(pair)

我预计DrawInstructions会以此结束:

[( “UW,” 100 “),(” UM”, “10”),( “UT”, “50”)]

但相反,我得到了:

[( “UT”, “50”),( “UT”, “50”),( “UT”, “50”)]

我确信这是非常基本但我无法弄明白,我已经搜索了几个小时。谢谢你的任何建议。

3 个答案:

答案 0 :(得分:3)

问题是,你一遍又一遍地改变同一个数组 - .add()不会为你创建副本。请尝试以下方法:

List<String[]> DrawInstructions = null;
String[] pair = {"",""};

pair[0]="UW";
pair[1]="100";
DrawInstructions.add(pair); 

pair = new String[] {"",""};
pair[0]="UM";
pair[1]="10";
DrawInstructions.add(pair);

pair = new String[] {"",""};
pair[0]="UT";
pair[1]="50";
DrawInstructions.add(pair);

或者,更好的是,

List<String[]> drawInstructions = new ArrayList<String[]>();
drawInstructions.add(new String[] {"UW", "100"}); 
drawInstructions.add(new String[] {"UM", "10"});
drawInstructions.add(new String[] {"UT", "50"});

更接近Java命名标准,避免NPE,最小化本地状态,并且可以说更具可读性。

答案 1 :(得分:2)

您要添加相同的数组(对)三次。你所做的只是改变它的价值(内容)。 请记住,java对引用进行操作,而不是对象的副本。

尝试创建pair1,pair2,pair3。

答案 2 :(得分:1)

您只定义了一个String[] pair = {"",""};

您编辑了同一个对象3次并将其添加到列表中。 你可以这样做:

List<String[]> DrawInstructions = new ArrayList<String[]>();

String[] pair1 = {"",""};
pair1[0]="UW";
pair1[1]="100";
DrawInstructions.add(pair1); 

String[] pair2 = {"",""};
pair2[0]="UW";
pair2[1]="100";
DrawInstructions.add(pair2); 
....