Java:在ArrayList的ArrayList中存储Excel数据的问题

Java:在ArrayList的ArrayList中存储Excel数据的问题,java,arraylist,apache-poi,Java,Arraylist,Apache Poi,我试图将excel中的数据存储在ArrayList中,然后将其存储在主ArrayList中。原因是excel工作表的每一行都有特定于该行的数据。我一直有一个问题,因为我相信当我在循环之前擦除内部ArrayList时,它也会删除主ArrayList中的数据 import java.io.*; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.s

我试图将excel中的数据存储在ArrayList中,然后将其存储在主ArrayList中。原因是excel工作表的每一行都有特定于该行的数据。我一直有一个问题,因为我相信当我在循环之前擦除内部ArrayList时,它也会删除主ArrayList中的数据

import java.io.*;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import java.util.ArrayList;


public class StoreData {

ArrayList<ArrayList<String>> shapes;
ArrayList<String> innerMembers;
ArrayList<String> test;
int start;
int end; 

public StoreData(){
    this.shapes = new ArrayList<>();
    this.innerMembers = new ArrayList<>();
    this.test = new ArrayList<>();
    start = 0;
    end = 0;
}

public ArrayList<ArrayList<String>> storeValues(String shapeType){

    //get the shape
    switch(shapeType){
        case "A":
            start = 1;
            end = 273;
            break;
        case "B":
            start = 274;
            end = 291;
            break;
        case "C":
            start = 292;
            end = 319;
            break;
        case "D":
            start = 320;
            end = 340;
            break;
        case "E":
            start = 341;
            end = 372;
            break;
        case "F":
            start = 373;
            end = 412;
            break;
        case "G":
            start = 413;
            end = 539;
            break;
        case "H":
            start = 540;
            end = 814;
            break;
        case "I":
            start = 1464;
            end = 1958;  
    }

 try
 {
    FileInputStream x = new FileInputStream(new File("/Users/JohnDoe/Documents/File.xls"));

    //Create Workbook instance 
    Workbook workbook = new HSSFWorkbook(x);

    //Get first/desired sheet from the workbook
    Sheet sheet = workbook.getSheetAt(0);

    //Iterate through each rows one by one
    for (int i = start; i <= end; i ++){

        Row row = sheet.getRow(i++);

        //iterate through each cell in row: max number of cells is 76
        for (int j = 0; j < 77; j++) {

            Cell cell = row.getCell(j);
            cell.setCellType(1);
            innerMembers.add(cell.getStringCellValue());
    }            

    /*******************/
    //Add to master ArrayList and clear inner ArrayList to get repopulated
    /*******************/
    shapes.add(innerMembers);
    innerMembers.clear();
}
x.close();
}
catch (Exception e)
{
    e.printStackTrace();
}

/***TEST STATEMENT***/
System.out.println(shapes.get(8).get(20));
/***TEST STATEMENT***/

return shapes;

}
}
import java.io.*;
导入org.apache.poi.ss.usermodel.Cell;
导入org.apache.poi.ss.usermodel.Row;
导入org.apache.poi.ss.usermodel.Sheet;
导入org.apache.poi.ss.usermodel.工作簿;
导入org.apache.poi.hssf.usermodel.HSSFWorkbook;
导入java.util.ArrayList;
公共类存储数据{
阵列列表形状;
ArrayList内部成员;
阵列列表测试;
int启动;
内端;
公共存储数据(){
this.shapes=new ArrayList();
this.innerMembers=新的ArrayList();
this.test=新的ArrayList();
开始=0;
结束=0;
}
公共ArrayList存储值(字符串shapeType){
//得到形状
开关(形状类型){
案例“A”:
开始=1;
end=273;
打破
案例“B”:
开始=274;
end=291;
打破
案例“C”:
开始=292;
end=319;
打破
案例“D”:
开始=320;
end=340;
打破
案例“E”:
开始=341;
end=372;
打破
案例“F”:
start=373;
end=412;
打破
案例“G”:
start=413;
end=539;
打破
案例“H”:
开始=540;
end=814;
打破
案例“一”:
开始=1464;
完=1958年;
}
尝试
{
FileInputStream x=newfileinputstream(新文件(“/Users/JohnDoe/Documents/File.xls”);
//创建工作簿实例
工作簿=新的HSSF工作簿(x);
//从工作簿中获取第一张/所需的工作表
工作表=工作簿。getSheetAt(0);
//逐个遍历每一行
对于(int i=start;i您可能需要尝试:

shapes.add(new ArrayList<String>(innerMembers)); // shallow copy 
innerMembers.clear();
shapes.add(新ArrayList(innerMembers));//浅拷贝
innerMembers.clear();

每次调用storeValues方法时,都需要创建一个新的innermembers ArrayList。形状正在存储相同的innermembers实例,也就是说,当您从数组列表中清除元素时,它会反映在形状引用数组列表中。