JavaFX中setAll和addAll方法有什么区别
JavaFX TableView 中
setAll()与addAll()的区别 你操作的这两个方法,实际是TableView绑定的数据容器ObservableList(通过tableView.getItems()获取)提供的API,二者逻辑差异非常明确:
addAll()是追加操作
不会改动列表内已有的任何元素,只会把传入的所有新元素依次添加到当前列表的尾部。调用后TableView会在现有展示行的末尾,新增新元素对应的行。
举个实际场景:如果当前TableView已经展示了3条商品数据,调用tableView.getItems().addAll(goods4, goods5)后,列表总条目数变为5,前3条原有数据保持不变,最后2条是新增的goods4、goods5。
该方法支持传入可变参数的多个对象,也支持传入一个集合对象,都会执行追加逻辑。setAll()是全量替换操作
会先清空列表内的所有原有元素,再把传入的新元素全部添加到列表中,效果等价于先调用clear()再调用addAll(),但它是原子操作:只会向TableView发送一次列表整体变更的通知,触发一次重绘,性能远高于手动写clear+addAll的组合(后者会触发两次变更通知,导致TableView做无意义的重复渲染)。调用后TableView会清空所有原有展示行,只显示本次传入的新元素对应的行。
还是用上面的例子:当前TableView有3条商品数据,调用tableView.getItems().setAll(goods4, goods5)后,列表总条目数为2,原来的3条数据会被全部移除,仅展示新传入的2条商品。
场景选择参考:
- 需要刷新全量数据、切换筛选/分类结果、首次加载数据时,用
setAll()- 需要追加分页数据、新增若干条记录且保留原有展示内容时,用
addAll()
内容的提问来源于stack exchange,提问作者michi
相关产品推荐
相关产品推荐

