[英]Java - How to store most recent strings from input stream?
我有一个输入流,每1秒为我提供一个新字符串。 我想存储25个最新的字符串以随时访问。 我正在用Java工作,不想使用公共库之外的任何东西。 我希望为此实现创建一个单独的类。
举个例子:
String a = "string a";
String b = "string b";
String c = "string c";
...
storedStrings[0] = c;
storedStrings[1] = b;
storedStrings[2] = a;
当String d =“ string d”到达时,我希望storedStrings像这样移动:
storedStrings[0] = d;
storedStrings[1] = c;
storedStrings[2] = b;
storedStrings[3] = a;
在加载25个字符串之后,我不再关心字符串a的值,应该将其丢弃以免占用内存。 我尝试了ArrayList,但没有成功。 这是Vector的用例吗?
请指出正确的方向!
public static void addToQueue(String s){
if (list == null) list = new LinkedList<>();
list.addFirst(s);
System.out.println(s);
if (list.size() > 25) {
list.removeLast();
}
}
使用链表可以很容易地做到这一点:
LinkedList<String> list = new LinkedList<>();
list.addFirst("your new string");
list.removeLast();
或仅使用通过以下方法扩展List的任何方法(这也适用于ArrayList):
List<String> list = new LinkedList<>();
list.add(0,"your new string");
list.remove(list.size()-1);
或者您可以使用队列
Queue<String> que = new LinkedList<>();
que.add("your new string");
que.remove();
一种想法是使用Queue
您可以使用arraylist.add(0,element)。 这将在第一个位置添加一个新元素,并将列表的所有元素向右移一个位置。 如果已经有25个元素,则只需删除最后一个元素。
if(ArrayList.size()>=25){
ArrayList.remove(ArrayList.size()-1);
}
ArrayList.add(0,d);
您可以尝试使用LinkedList
LinkedList<String> array = new LinkedList<>();
for (int i = 0; i < 30; i++) {
array.add(Integer.toString(i));
}
array.removeFirst();
for (String s : array) {
System.out.println(s);
}
使用队列:
public static void main(String[] args) {
AbstractQueue<String> array = new ArrayBlockingQueue<String>(25);
for (int i = 0; i < 30; i++) {
if (array.size() >= 25)
array.remove();
array.add(Integer.toString(i));
}
for (String s : array) {
System.out.println(s);
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.