ArrayList未按groovy Arrays.sort()排序

时间:2015-11-09 03:45:16

标签: arrays sorting groovy

groovy中的

Arrays.sort()不起作用。为什么?

groovy程序:

foo = [3,2,1,9]
Arrays.sort(foo)
println foo.getClass()
println foo

结果:

class java.util.ArrayList
[3, 2, 1, 9]

版本:

$ groovy --version
Groovy Version: 2.4.4 JVM: 1.7.0_80 Vendor: Oracle Corporation OS: Mac OS X

我认为这是由java.util.ArrayList引起的。所以我试着添加“type”(见下文),没关系(我可以得到排序结果)。但我无法理解这些时髦的行为......

groovy(这将被排序):

int[] foo2 = [3,2,1,9]
Arrays.sort(foo2)
println foo2.getClass()
println foo2

3 个答案:

答案 0 :(得分:2)

Arrays.sort()需要数组。 Groovy解释在varargs样式的参数列表中将对象作为一个参数传递。你可以在这里看到:

def test(Object[] a) {
  println a[0]
}
test(foo)

输出

[3, 2, 1, 9]

答案 1 :(得分:2)

正如其他答案所指出,Arrays适用于ArraysArrayArrayList是非常不同的数据结构,主要区别在于前者是固定长度结构,后者是可变长度数据。

您在代码中寻找的是将Arrays.sort(foo)替换为Collections.sort(foo)

但是,使用Groovy,您只需在sort()对象上调用ArrayList方法即可。请注意,sort也是一个闭包,因此您可以直接在对象上实现自定义排序算法:

foo = [3,2,1,9] 
println foo.getClass()
println foo //[3,2,1,9] 
Collections.sort(foo)
println foo //[1,2,3,9] 
println foo.sort() //[1, 2, 3, 9]
println foo.sort{a,b-> a-b } //[1, 2, 3, 9]
println foo.sort{a,b-> b-a } //[9, 3, 2, 1]

答案 2 :(得分:1)

直接排序。只需做一个[3, 2, 1, 9].sort()