Кажется, что Scala делает что-то отличное от Java, когда дело доходит до varargs. По крайней мере, я не могу заставить этот массив перетасовываться каким-либо образом Предположительно, перестановка в списке будет перетасовывать массив, потому что список поддерживается массивом. Что ж, похоже, что Scala создаст массив new при передаче аргументов vararg в Java, что делает вышеупомянутый пример бесполезным.
scala> val b = java.util.Arrays.asList(a: _*)
b: java.util.List[java.lang.String] = [a, b, c]
scala> java.util.Collections.shuffle(b); println(a.toString+" "+b.toString)
Array(a, b, c) [a, b, c]
scala> java.util.Collections.shuffle(b); println(a.toString+" "+b.toString)
Array(a, b, c) [c, b, a]
scala> java.util.Collections.shuffle(b); println(a.toString+" "+b.toString)
Array(a, b, c) [a, c, b]
scala> java.util.Collections.shuffle(b); println(a.toString+" "+b.toString)
Array(a, b, c) [b, a, c]
scala> java.util.Collections.shuffle(b); println(a.toString+" "+b.toString)
Array(a, b, c) [a, b, c]
scala> java.util.Collections.shuffle(b); println(a.toString+" "+b.toString)
Array(a, b, c) [c, a, b]
Он работает с Ints, несмотря на утверждение, что иначе:
scala> val a = Array(1,2,3)
a: Array[Int] = Array(1, 2, 3)
scala> val b = java.util.Arrays.asList(a: _*)
b: java.util.List[Int] = [1, 2, 3]
scala> java.util.Collections.shuffle(b); println(a.toString+" "+b.toString)
Array(1, 2, 3) [2, 3, 1]
scala> java.util.Collections.shuffle(b); println(a.toString+" "+b.toString)
Array(1, 2, 3) [3, 2, 1]
scala> java.util.Collections.shuffle(b); println(a.toString+" "+b.toString)
Array(1, 2, 3) [3, 2, 1]
scala> java.util.Collections.shuffle(b); println(a.toString+" "+b.toString)
Array(1, 2, 3) [1, 2, 3]
В Scala 2.8 есть более простой способ:
scala> scala.util.Random.shuffle(a)
res32: Sequence[Int] = Array(1, 2, 3)
scala> scala.util.Random.shuffle(a)
res33: Sequence[Int] = Array(2, 1, 3)
scala> scala.util.Random.shuffle(a)
res34: Sequence[Int] = Array(3, 2, 1)
Обратите внимание, что в стиле Scala он не меняет исходный массив.