数组列表检索顺序



我有一个java ArrayList,我向其中添加了5个对象。

如果我迭代列表并将其打印出来,然后迭代列表并再次打印出来。

这两种情况下的检索顺序会相同吗?(我知道它可能与插入顺序不同)

是的,假设您没有在两者之间修改列表。从…起http://docs.oracle.com/javase/6/docs/api/java/util/List.html:

迭代器

Iterator<E> iterator()

按正确的顺序在此列表中的元素上返回迭代器。

也许有点模糊,但在该页面的其他部分,这个术语被定义为:

正确的顺序(从第一个元素到最后一个元素)

(我知道这可能与插入顺序不同)

不,不会的。List的契约要求add的顺序与迭代顺序相同,因为add在末尾插入,而iterator生成一个按顺序从开始到结束迭代的迭代器。

Set不需要这个,所以您可能会混淆SetList关于迭代顺序的合同。

来自Javadoc:

Iterator<E> iterator()

按正确的顺序在此列表中的元素上返回迭代器。

它在List接口的规范中,以保持顺序。

Set类不保持秩序。

如果不更改列表,则迭代顺序将保持不变。列表具有合同指定的顺序,iterator规范保证它按该顺序迭代元素。

是的,ArrayList保证其元素的迭代顺序,也就是说,只要在ArrayList上迭代时不进行任何插入,它们将以与插入它们相同的顺序出现。

除非您更改正在使用的迭代器,否则检索不会发生变化。只要您使用相同的方法进行检索,并且没有更改列表本身,则项目将以相同的顺序返回。

使用add(E e)将元素添加到ArrayList时,该元素会附加到列表的末尾。因此,如果您所做的只是多次调用单参数add方法,然后进行迭代,那么迭代的顺序将与调用add的顺序完全相同。

每次迭代相同的未修改列表时,迭代顺序都是相同的。

此外,假设使用add()方法添加元素,迭代顺序将与插入顺序相同,因为此方法将元素附加到列表的末尾。

是的,只要列表不发生变化,并且使用相同的迭代器,检索顺序就可以保证是相同的,但必须依赖检索顺序,这表明设计有问题。将业务逻辑建立在特定的检索顺序基础上通常不是一个好主意。

如果不修改偶数集(向其添加或删除项),则偶数集将返回相同的结果。

最新更新