有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java为什么在我的ArrayList中插入后会重复行?

我正在ArrayList中添加行(1D字符串数组)。我正在打印它,在输入maake之前,确保arraylist中输入的行是正确的

令人惊讶的是:在打印我的arraylist时,我可以看到,输入的最后一行总是被打印,而不是其他行

代码如下:

try {
    while(rs.next())
    {
        for(int i=0; i< parameters.length; i++)
        {
            recordSet[i] = rs.getString(parameters[i]);
        }
        System.out.println("After for loop" + " "+ recordSet[0] +" "+ recordSet[1]+ " " +recordSet[2]);
        ar.add(recordSet);

    }
    System.out.println("Printing the arraylist");
    for (String[] arr : ar) {
        System.out.println(Arrays.toString(arr));
    }
} 
catch (SQLException e){ 
    e.printStackTrace();
    log.error("extractValues: Exception caught while iterating resultSet" + e.toString());
}


Output is:
 After for loop 0 1 rakesh123
 After for loop 0 2 raj123

Printing the arraylist
[0, 2, raj123]
[0, 2, raj123]

共 (2) 个答案

  1. # 1 楼答案

    在while循环中指定要引用的新记录集对象并检查

    while(rs.next())
    {
       recordSet = new String[paramters.length];
        for(int i=0; i< parameters.length; i++)
        {
            recordSet[i] = rs.getString(parameters[i]);
        }
        System.out.println("After for loop" + " "+ recordSet[0] +" "+ recordSet[1]+ " " +recordSet[2]);
        ar.add(recordSet);
    
    }
    
  2. # 2 楼答案

    recordSet添加到List时,使用的是相同的数组引用

    while(rs.next())
    {
        String[] recordSet = new String[paramters.length]; // <  make a new one.
        for(int i = 0; i < parameters.length; i++)
        {
            recordSet[i] = rs.getString(parameters[i]);
        }
        System.out.println("After for loop " + recordSet[0] 
            + " " + recordSet[1] + " " + recordSet[2]);
        ar.add(recordSet);
    }
    

    确保注释掉另一个recordSet声明