如何在不影响下一个函数的情况下清除ArrayList?

时间:2016-07-19 10:08:02

标签: java arraylist

我正在尝试读取一个文件并将其传递给名为" Allabaque"它有一个String和两个List。当我读完第一个abaque时我想清除两个列表,这样我就可以得到nexts值,但如果我清除了List,即使我在添加新的abaque之后再执行它,该函数也会将两个新的abaque传递给我空列表。这是代码:

public void importFrom(String filename) {
    try (
            FileInputStream fis = new FileInputStream(filename);
            BufferedReader reader = new BufferedReader(new InputStreamReader(fis));) {
        String line;
        String line2;
        int c = 0;
        List<String> Pression = new ArrayList<>();
        List<String> Couple = new ArrayList<>();
        List<String> P2 = new ArrayList<>();
        List<String> C2 = new ArrayList<>();
        String Cle = "null";

        while ((line = reader.readLine()) != null) {

            if (c == 2 && !"|".equals(line)) {

                String[] arg = line.split("-");
                boolean u = Pression.add(arg[0]);
                boolean u2 = Couple.add(arg[1]);
            }
            if (c == 1) {
                Cle = line;
                c = 2;
                //System.out.printf("%s",Cle);
            }
            if ("|".equals(line)) {
                c = 1;
                if (!"null".equals(Cle)) {
                    //P2 = Pression;
                    //C2 = Couple;
                    addAbaque(new Abaque(Cle, Pression, Couple));//addAbaque(new Abaque(Cle,P2,C2));
                    Couple.clear();
                    Pression.clear();
                }
            }
        }
    } catch (IOException ioe) {
        System.out.printf("Erreur import");
    }
}

addAbaque方法很简单

public void addAbaque(Abaque abaque) {
    mAbaques.add(abaque);``
}

使用调试我认为我发现内存存在问题,但我真的不知道如何修复它。

我已经尝试了两个中间人列表,我把它像评论一样,但仍然没有。

1 个答案:

答案 0 :(得分:0)

清除CouplePression列表还会清除以前传递给Abaque构造函数的列表,因为您将List引用传递给构造函数,而不是列表。

您可以将新列表传递给构造函数:

addAbaque(new Abaque(Cle,new ArrayList<String>(Pression),new ArrayList<String>(Couple)));

或创建新列表而不是清除旧列表,即替换

Couple.clear();
Pression.clear();

Couple = new ArrayList<>();
Pression = new ArrayList<>();

后一种选择可能更有效,因为您不必将原始列表的内容复制到新列表,并且您不必清除任何列表。