我正在尝试读取一个文件并将其传递给名为" 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);``
}
使用调试我认为我发现内存存在问题,但我真的不知道如何修复它。
我已经尝试了两个中间人列表,我把它像评论一样,但仍然没有。
答案 0 :(得分:0)
清除Couple
和Pression
列表还会清除以前传递给Abaque
构造函数的列表,因为您将List
引用传递给构造函数,而不是列表。
您可以将新列表传递给构造函数:
addAbaque(new Abaque(Cle,new ArrayList<String>(Pression),new ArrayList<String>(Couple)));
或创建新列表而不是清除旧列表,即替换
Couple.clear();
Pression.clear();
与
Couple = new ArrayList<>();
Pression = new ArrayList<>();
后一种选择可能更有效,因为您不必将原始列表的内容复制到新列表,并且您不必清除任何列表。