java - ArrayList 的 ArrayList 返回不正确的数据

标签 java android multidimensional-array arraylist

<分区>

我目前正在制作一个 android 应用程序,它需要将一些数据临时保存为数组列表(字符串)的数组列表,但是当我试图绕过它们时,添加虚拟数据并将其打印到depug stream,我没有得到我期望的数据,而是最后添加的数据行三次。如果这确实有意义,这里就是代码。

        ArrayList<ArrayList<String>> module_list = new ArrayList<ArrayList<String>>();
    ArrayList<String> new_row = new ArrayList<String>();

    new_row.add(module_description,"Description0");
    new_row.add(module_address, "Address0");
    new_row.add(module_type, "Type0");
    module_list.add(0,new_row);

    new_row.add(module_description, "Description1");
    new_row.add(module_address,"Address1");
    new_row.add(module_type, "Type1");
    module_list.add(1,new_row);

    new_row.add(module_description, "Description2");
    new_row.add(module_address, "Address2");
    new_row.add(module_type,"Type2");;
    module_list.add(2, new_row);


    for(int row = 0; row<module_list.size() ; row++) {
        ArrayList<String> returned_row = new ArrayList<String>();
        returned_row = module_list.get(row);

        Log.d("APP", "Row: "+ Integer.toString(row));
        Log.d("APP", "Module description: " + returned_row.get(module_description));
        Log.d("APP", "Module address: " + returned_row.get(module_address));
        Log.d("APP", "Module type: " + returned_row.get(module_type));
    }

本来打算依次打印arraylist每一行的内容,结果却得到:

Row: 0
Module description: Description2
Module address: Address2
Module type: Type2
Row: 1
Module description: Description2
Module address: Address2
Module type: Type2
Row: 2
Module description: Description2
Module address: Address2
Module type: Type2

这是添加的最后一行,但代替了所有行。以前有人遇到过这样的问题吗?如有任何建议,我们将不胜感激。

最佳答案

每次添加到module_list之前,您都必须初始化new_row

ArrayList<ArrayList<String>> module_list = new ArrayList<ArrayList<String>>();
        ArrayList<String> new_row = new ArrayList<String>();

        new_row.add(module_description,"Description0");
        new_row.add(module_address, "Address0");
        new_row.add(module_type, "Type0");
        module_list.add(0,new_row);

        new_row = new ArrayList<String>();
        new_row.add(module_description, "Description1");
        new_row.add(module_address,"Address1");
        new_row.add(module_type, "Type1");
        module_list.add(1,new_row);

        new_row = new ArrayList<String>();
        new_row.add(module_description, "Description2");
        new_row.add(module_address, "Address2");
        new_row.add(module_type,"Type2");;
        module_list.add(2, new_row);


        for(int row = 0; row<module_list.size() ; row++) {
            ArrayList<String> returned_row = new ArrayList<String>();
            returned_row = module_list.get(row);

            Log.d("APP", "Row: "+ Integer.toString(row));
            Log.d("APP", "Module description: " + returned_row.get(module_description));
            Log.d("APP", "Module address: " + returned_row.get(module_address));
            Log.d("APP", "Module type: " + returned_row.get(module_type));
        }

如果您不初始化它,那么它将覆盖现有键的值。

关于java - ArrayList 的 ArrayList 返回不正确的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31887424/

相关文章:

java - 如何使用 Spring 缓存管理器与 redis 1.6.2.RELEASE

java - android.view.InflateException : Binary XML file line #34: Error inflating class AutoFitTextureView

algorithm - 二维数组,所有值都是相邻的

c++ - 不断收到此段错误 :11 error

C# 添加两个二维数组

java - 使用 spring 3.0 MVC 尝试 IntelliJ,如何导入所需的库?

java - 无法获取嵌套对象层次结构中类型的简单名称

java - Java 中是否有 DateTimeFormatInfo.MonthDayPattern 属性的类似物?

java - 使用 ViewPageIndicator 的 SherlockFragment 内的 Tabhost

android - 如何在 Kotlin Jetpack Compose 中使用 rememberLauncherForActivityResult 读取文件?