数组列表检索顺序

时间:2012-02-27 22:43:29

标签: java arraylist

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

如果我遍历列表并将其打印出来,则迭代列表并再次打印出来。

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

10 个答案:

答案 0 :(得分:24)

是的,假设您尚未修改其间的列表。来自http://docs.oracle.com/javase/6/docs/api/java/util/List.html

  

<强>迭代

     

Iterator<E> iterator()

     

以适当的顺序返回此列表中元素的迭代器。

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

  

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

答案 1 :(得分:10)

  

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

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

Set不要求这样做,因此您可能会混淆SetList关于迭代顺序的合同。

来自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)

如果你不修改它们(向它们添加或删除项目),偶数组将返回相同的结果。