【发布时间】:2014-04-21 19:38:30
【问题描述】:
我想使用以下方法从数组列表中删除元素:
public static String removeOldestItem(ArrayList<String> theList)
并使用此方法将删除的元素写入文本文件:
public static void addItem(ArrayList<String> theList, String s)
到目前为止我有:
import java.io.FileWriter;
import java.io.PrintWriter;
import java.util.ArrayList;
public class test {
public static void main(String[] args) {
// TODO Auto-generated method stub
ArrayList <String> s = new ArrayList<> (4);
s.add("Knock knock.");
s.add("Who's there?");
s.add("*very long pause....*");
s.add("Java");
try {
FileWriter fos = new FileWriter("list_contents.txt");
PrintWriter out = new PrintWriter(fos);
for (int i = 0; i < s.size(); i++) {
out.write(String.valueOf(s.get(i) ) );
out.write("\r\n");
}
out.close();
} catch (Exception e) {
}
}
}
第二种方法应该将字符串“s”放入传递的列表“theList”中。第一种方法应该删除列表中最长的项目并将该项目返回给调用者。
我无法理解如何实现这些方法。 有什么想法吗?
【问题讨论】:
-
您是在尝试为 ArrayList 类实现新方法还是其他方法?
-
这些是我老师命名的方法,所以它们不是新方法,只是我需要编写的方法
-
好的,所以你需要找到一种方法来判断最旧的元素是什么。关于 arraylist 的棘手之处在于它具有要在任何参考点插入的元素,而且我不知道有什么方法可以告诉它有多旧。如果我们忽略在特定点插入并假设您仅在“结束”插入,您可以创建一个迭代器来跟踪“最旧”项目并假设数组中紧随其后的项目是下一个最旧的。由于我们也在控制插入方法,这似乎是一个安全的想法
-
说索引 0 是最旧的,我可以使用 for 循环来计算所有最多 3 个以继续将元素添加到列表中吗?如果是这样,我是否需要在这两种方法中都实现它,或者它们是否在方法之外?
-
查看迭代器对象docs.oracle.com/javase/7/docs/api/java/util/Iterator.html 和ArrayList 类的迭代器方法docs.oracle.com/javase/7/docs/api/java/util/… 基本上,它是一个对象,可以让您在像ArrayList 这样的数据对象中保持位置。然后,您可以告诉它转到下一个对象、删除该对象等。您可以使用迭代器的位置来表示最旧的对象。然后,当您要删除对象时,将其删除并移动迭代器。尝试一下,看看什么最适合你