我被迫在JavaFx应用程序中使用ObservableList
,而我的List
必须最多包含1000个项目。
所以我当时在考虑使用FIFO系统,但是我只看到以下解决方案:
observableListData.add(...) //1001 item
if (observableListData.size()>1000){
observableListData.remove(0); // 1000 item
}
我在此列表中添加了很多项目,所以我认为这不是限制
ObservableList
大小的最佳方法,还有另一种方法吗?编辑:
要回答您的一些问题:
我需要一个
ObservableList
,因为它链接到ListView
。我必须使用FIFO,因为我显示此列表的项目
最佳答案
您可以通过以下方式扩展ModifiableObservableListBase
,这是收集的基础,由FXCollections.observableList
返回:
public class ObservableLimitedList<T> extends ModifiableObservableListBase<T> {
private LinkedList<T> list;
private int maxSize;
public ObservableLimitedList(int maxSize) {
this.maxSize = maxSize;
list = new LinkedList<>();
}
@Override
public boolean add(T element) {
boolean result = super.add(element);
if (size() > maxSize) {
remove(0);
}
return result;
}
// delegate overrides:
@Override
public T get(int index) {
return list.get(index);
}
@Override
public int size() {
return list.size();
}
@Override
protected void doAdd(int index, T element) {
list.add(index, element);
}
@Override
protected T doSet(int index, T element) {
return list.set(index, element);
}
@Override
protected T doRemove(int index) {
return list.remove(index);
}
}
这是此实现的测试:https://ideone.com/MMhnS6