猿问

数组列表的重复条目

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


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

    } 


一只斗牛犬
浏览 140回答 3
3回答

宝慕林4294392

您必须在每个循环中清除临时列表或重新设置它。我个人更喜欢选项2。ArrayList<String> temp = new ArrayList<>();&nbsp; &nbsp;public static void main(String[] args) {&nbsp; &nbsp; &nbsp; &nbsp; for (int q = 1; q < 3; q++) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; temp = new ArrayList<>();&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; switch (q) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; case 1:&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; temp.add("case1");&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; methodA();&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; list.add(temp);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; break;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; case 2:&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; temp.add("case2");&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; methodA();&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; list.add(temp);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; break;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; }

慕的地10843

由于clear()影响已添加到最终结果的列表(在前一次迭代中),您必须在清除它之前制作副本 (1) (2)。list.add(new ArrayList<>(temp));&nbsp; // 1temp.clear();&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;// 2让我们将 3 个重复的行移出switch.switch (q) {&nbsp; &nbsp; case 1:&nbsp; &nbsp; &nbsp; &nbsp; temp.add("case1");&nbsp; &nbsp; &nbsp; &nbsp; break;&nbsp; &nbsp; case 2:&nbsp; &nbsp; &nbsp; &nbsp; temp.add("case2");&nbsp; &nbsp; &nbsp; &nbsp; break;}methodA();list.add(new ArrayList<>(temp));temp.clear();

阿波罗的战车

发生这种情况是因为您将完整的 Arraylist 添加到字符串列表中而不清除它。你可以做的是在每个 case 语句中清除 arrayList tempfor (int q = 1; q < 3; q++) {&nbsp; &nbsp; &nbsp; &nbsp; switch (q) {&nbsp; &nbsp; &nbsp; &nbsp; case 1:&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; temp = new ArrayList<>();&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; temp.add("case1");&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; methodA();&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; list.add(temp);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; break;&nbsp; &nbsp; &nbsp; &nbsp; case 2:&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; temp = new ArrayList<>();&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; temp.add("case2");&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; methodA();&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; list.add(temp);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; break;&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; }
随时随地看视频慕课网APP

相关分类

Java
我要回答