在java中的链表中的迭代器和remove()

时间:2013-10-27 14:53:59

标签: java

我有一个链接列表,其中包含人员的数据并将其写入文件。我想从列表中删除一个条目,然后将新列表写入文件。 我使用了iterator,但是当我将它写入文件时,它会显示空条目。

public void deleteItem(String Iname){
    MailFiling objFile = new MailFiling();
    MailingList obj = new MailingList();
    Iterator objI = list.iterator();
    while(objI.hasNext()){
        Object o = objI.next();
        if(o.toString().contains(Iname))
            list.remove(obj);
        objFile.WriteToFile2(list);
    }//end of while
}//end of method


public void WriteToFile2(LinkedList list) {

    try {

        String writeFile = new String();
        for (int i =0; i<list.size(); i++)
        writeFile = list.get(i).toString();

        File file = new File("Mailing List 2.txt");
        FileWriter fw = new FileWriter(file, true);
        BufferedWriter bw = new BufferedWriter(fw);

        bw.write(writeFile);
        bw.newLine();
        bw.close();

    } 
     catch (IOException e) {
        System.out.println("Error opening file");
        e.printStackTrace();
    }
}

2 个答案:

答案 0 :(得分:2)

您应该使用迭代器的remove方法而不是列表方法。

Iterator objI = list.iterator();
while(objI.hasNext()) {
    if(objI.next().toString().contains(Iname)) {
        objI.remove();
    }
}
objFile.WriteToFile2(list);

另请注意,write方法应该在循环外部调用。

<强>更新

您的打印代码也存在一些问题。试试这个。

Writer writer = new BufferedWriter(new OutputStreamWriter(
      new FileOutputStream("Mailing List 2.txt"), "utf-8"));
for (int i =0; i<list.size(); i++) {
    writer.write(list.get(i).toString() + "\n");
}
writer.flush();
writer.close();

答案 1 :(得分:0)

使用iterator.remove();代替list.remove(obj);