我有一个java ArrayList
,我在其中添加了5个对象。
如果我遍历列表并将其打印出来,则迭代列表并再次打印出来。
这两种情况下的检索顺序是否相同? (我知道它可能与插入顺序不同)
答案 0 :(得分:24)
是的,假设您尚未修改其间的列表。来自http://docs.oracle.com/javase/6/docs/api/java/util/List.html:
<强>迭代强>
Iterator<E> iterator()
以适当的顺序返回此列表中元素的迭代器。
或许有点模糊,但在该页面的其他部分,这个术语被定义为:
正确的顺序(从第一个元素到最后一个元素)
答案 1 :(得分:10)
(我知道它可能与插入顺序不同)
不,不会。 List
的契约要求add
顺序与迭代顺序相同,因为add
在末尾插入,iterator
生成迭代器,从开始到迭代按顺序结束。
Set
不要求这样做,因此您可能会混淆Set
和List
关于迭代顺序的合同。
来自Javadoc:
Iterator<E> iterator()
以适当的顺序返回此列表中元素的迭代器。
答案 2 :(得分:6)
保留顺序的List
接口规范。
Set
类不保留顺序。
答案 3 :(得分:2)
如果您没有改变列表,那么迭代顺序将保持不变。列表具有合同指定的排序,iterator
规范保证它按顺序迭代元素。
答案 4 :(得分:2)
是的,ArrayList
保证对其元素的迭代顺序 - 也就是说,它们将以您插入它们的顺序出现,前提是您在迭代{{1}时不进行任何插入}。
答案 5 :(得分:1)
除非您更改正在使用的迭代器,否则检索不会发生变化。只要您使用相同的方法进行检索并且没有更改列表本身,那么这些项目将以相同的顺序返回。
答案 6 :(得分:1)
使用add(E e)
向ArrayList添加元素时,该元素将附加到列表的末尾。因此,如果您所做的只是多次调用单参数add
方法然后迭代,则迭代的顺序与对add
的调用完全相同。
答案 7 :(得分:1)
每次迭代相同的未修改列表时,迭代顺序都是相同的。
此外,假设您使用add()
方法添加元素,迭代顺序将与插入顺序相同,因为此方法会将元素附加到列表的末尾。
答案 8 :(得分:-1)
是的,只要列表没有变异并且您使用相同的迭代器,检索顺序就保证是相同的,但是必须依赖检索顺序表明设计中存在一些问题。将业务逻辑建立在某些检索顺序上通常不是一个好主意。
答案 9 :(得分:-2)
如果你不修改它们(向它们添加或删除项目),偶数组将返回相同的结果。