如果Set是无序的,为什么Dart的Set数据类型有.first和.last属性?

hivapdat  于 2023-06-27  发布在  其他
关注(0)|答案(1)|浏览(154)

我对Dart中的Set数据类型感到困惑。根据文档,集合是无序的,这意味着将项目添加到集合的顺序不被保留。但是,我注意到Dart中的Sets有一个.first属性和一个.last属性。如果集合是无序的,这怎么可能呢?有人能解释一下为什么这些属性存在以及如何有效地使用它们吗?

xa9qqrwz

xa9qqrwz1#

Dart在其标准库中提供了三种Set实现:HashSetLinkedHashSet(默认值)和SplayTreeSet。这三个都实现了Set接口,这意味着它们必须都实现Iterable
SplayTreeSetLinkedHashSet都有指定的迭代顺序。HashSet没有,但仍然实现IterableHashSetAPI documentation对这个问题有如下的说明:
集合的迭代顺序没有指定,并且取决于所提供的元素的散列码。但是,秩序是稳定的:在同一集合上的多次迭代产生相同的顺序,只要该集合不被修改。
因此,尽管依赖HashSet中项目的顺序通常不是很有用,但只要不修改,你就可以。
一般来说,虽然一些Set实现不是有序的,但它们是Iterable是有意义的,这样它们可以与其他非有序的Iterable API一起使用,例如for循环或Iterable.any。你可以用Iterable做很多事情,这些事情与元素的顺序无关。

相关问题