阵列清单重复的项目

时间:2018-07-28 13:54:36

标签: java arraylist multidimensional-array

我不想将新项目添加到现有列表中,而是要为新项目创建一个新列表。例如,

FINAL OUTPUT:[[case1, this is method A], [case2, this is method A]]

但是,我的代码输出是

FINAL OUTPUT:[[case1, this is method A, case2, this is method A], [case1, this is method A, case2, this is method A]]

我不太确定我哪里出错了。 任何帮助,不胜感激!谢谢!

下面是我的代码。

   static List<List<String>> list = new ArrayList<>();

    static ArrayList<String> temp = new ArrayList<>();

    public static void main(String[] args) {
        for (int q = 1; q < 3; q++) {
            switch (q) {
            case 1:
                temp.add("case1");
                methodA();
                list.add(temp);
                break;

            case 2:
                temp.add("case2");
                methodA();
                list.add(temp);
                break;
            }
        }
        System.out.println("FINAL OUTPUT:" + list);
    }

    private static void methodA() {
        temp.add("this is method A");
    } 

3 个答案:

答案 0 :(得分:1)

由于clear()影响已经添加到最终结果中的列表(在上一次迭代中),因此您必须先创建副本(1),然后再清除副本(2)。

list.add(new ArrayList<>(temp));  // 1
temp.clear();                     // 2

让我们将三行重复的内容从switch中移出。

switch (q) {
    case 1:
        temp.add("case1");
        break;

    case 2:
        temp.add("case2");
        break;
}
methodA();
list.add(new ArrayList<>(temp));
temp.clear();

答案 1 :(得分:0)

您要么必须在每个循环中清除临时列表,要么将其重新实例化。我个人更喜欢选项2。

ArrayList<String> temp = new ArrayList<>();   

public static void main(String[] args) {
        for (int q = 1; q < 3; q++) {

            temp = new ArrayList<>();

            switch (q) {
            case 1:
                temp.add("case1");
                methodA();
                list.add(temp);
                break;

            case 2:
                temp.add("case2");
                methodA();
                list.add(temp);
                break;
            }
        }

答案 2 :(得分:-2)

之所以发生这种情况,是因为您将完整的Arraylist添加到了字符串列表中而没有清除它。 您可以做的是在每个case语句内清除arrayList temp

{{1}}