我正在尝试用Java创建一个"有限列表".如果我添加新条目,它应该删除旧条目.
例如,如果列表大小为3,并且我添加了第4项,则应删除第1项.目前我用remove(0)a 解决了这个问题ArrayList,但我听说ArrayLists很慢.
有没有更快的方法来解决这个问题?我目前的代码是:
public class LimitedList<T> extends ArrayList<T> {
private int maximum;
public LimitedList(int maximum) {
this.maximum = maximum;
}
@Override
public boolean add(T t) {
boolean r = super.add(t);
while (size() > maximum) {
remove(0);
}
return r;
}
}
Run Code Online (Sandbox Code Playgroud)
但我听说ArrayList非常慢.
ArrayList其他集合的某些操作对其他操作来说很慢.这是因为ArrayList在窗帘后面使用了一个阵列,并且对于头部的移除操作,它必须将所有元素向左移动一个.因此,在大的方面哦,从头部移除是O(N)为ArrayListS其中它是O(1)为LinkedList秒.
如果您只想在集合的尾部添加项目并删除头部中的元素,我建议您使用LinkedList:
public class LimitedList<T> extends LinkedList<T> {
private int maximum;
public LimitedList(int maximum) {
this.maximum = maximum;
}
@Override
public boolean add(T t) {
boolean r = super.add(t);
int n = this.size();
while (n > maximum) {
this.removeFirst();
n--;
}
return r;
}
}
Run Code Online (Sandbox Code Playgroud)
@JBNizet的一个重要注意事项是你应该继承ArrayList或LinkedList直接,但实现一个Collection<T>类似于:
public class LimitedList<T> implements Collection<T> {
private final LinkedList<T> list;
private int maximum;
public LimitedList(int maximum) {
this.list = new LinkedList<T>();
this.maximum = maximum;
}
@Override
public boolean add(T t) {
boolean r = this.list.add(t);
int n = this.list.size();
while (n > maximum) {
this.list.removeFirst();
n--;
}
return r;
}
//implement other Collection methods...
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
89 次 |
| 最近记录: |