getAt运算符变异列表

时间:2013-06-06 07:53:27

标签: groovy

以下代码:

def a = [4,10,6].iterator().sort();
println a[1];
println a[1];

产生以下输出:

6
null

奇怪的是,似乎a[1]正在改变列表。这记录在哪里?

1 个答案:

答案 0 :(得分:6)

应该是

def a = [4,10,6].sort();
println a[1];
println a[1];

没有iterator()

然后它产生你期望的

6
6

它根本没有改变任何内容! [...].iterator().sort()的结果属于java.util.ArrayList$ListItr类型而不是您使用索引1(方法getAt()被调用在Iterator)所以你将迭代器移动2个元素,迭代器在最后位置。然后再次执行此操作并尝试从最后+ 1位置读取项目,因此它将返回null

Iterator.getAt()的文档。