2015-11-09 62 views
2

Arrays.sort()在groovy中不起作用。爲什麼??ArrayList未按groovy排序Arrays.sort()

常規程序:

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造成的。所以我試圖添加「類型」(見下文),沒關係(我可以得到排序結果)。排序直接

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

回答

1

:但我無法理解這些常規行爲......

常規(這將排序)。只要做一個[3, 2, 1, 9].sort()

2

Arrays.sort()需要數組。 Groovy將一個對象作爲一個參數傳遞給可變參數類型的參數列表。你可以在這裏看到:

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

輸出

[3, 2, 1, 9] 
2

在其他的答案中指出,Arrays作品上ArraysArrayArrayList是非常不同的數據結構,主要的區別是前者是一個固定長度的結構,後者是一個可變長度的數據。

您在代碼中查找的是用Collections.sort(foo)替代Arrays.sort(foo)

但是,使用Groovy,您可以簡單地在您的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]