我被迫在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

09-30 13:51
查看更多