Observablelist和arraylist,不同的行为

时间:2014-06-19 19:28:21

标签: java collections javafx

我在muliple选择模式下使用javafx listview,特别是删除列表中所选项目的方法。

带有observablelist的方法

    list.getItems()
            .removeAll(
                    list.getSelectionModel()
                    .getSelectedItems());

带有数组列表的方法

    list.getItems()
            .removeAll(new ArrayList<Object>(
                            list.getSelectionModel()
                            .getSelectedItems()));

为什么这些实现会产生不同的结果? arraylist实现仅删除选定的项目。 observablelist实现删除第一个选定项目之后的所有内容,无论它是否被选中。

这可能是javafx removeAll方法中的错误吗?

2 个答案:

答案 0 :(得分:1)

ObservableList由实际模型支持,并且随着删除条目,这些更改与listview 一起发生变化。通过首先将所选元素复制到ArrayList,您可以消除问题:创建的ArrayList不依赖于列表视图,因此在removeAll操作期间不会更改。

答案 1 :(得分:0)

list.getItems().removeAll(
    new ArrayList<Object>(list.getSelectionModel().getSelectedItems()));

这是创建一个ArrayList<Object>,其中包含的Object是另一种列表结构。


因此,在第一种情况下,list.getSelectionModel().getSelectedItems()会获得一个项目列表,而.removeAll会查看该列表以查看要删除的项目。

在第二种情况下,new ArrayList<Object>(list.getSelectionModel().getSelectedItems())是列表的ArrayList - .removeAll在调用它的列表中查找该列表。