Về cơ bản với cùng lý do tại sao default partitioner cannot partition array keys.
Scala Array
chỉ là một wrapper xung quanh mảng Java và hashCode
của nó không phụ thuộc vào một nội dung:
scala> val x = Array(1, 2, 3)
x: Array[Int] = Array(1, 2, 3)
scala> val h = x.hashCode
h: Int = 630226932
scala> x(0) = -1
scala> x.hashCode() == h1
res3: Boolean = true
Nó có nghĩa là hai mảng với chính xác cùng một nội dung không bằng nhau
scala> x
res4: Array[Int] = Array(-1, 2, 3)
scala> val y = Array(-1, 2, 3)
y: Array[Int] = Array(-1, 2, 3)
scala> y == x
res5: Boolean = false
Do đó, không thể sử dụng Arrays
làm khóa có ý nghĩa. Nếu bạn không tin tưởng chỉ cần kiểm tra những gì sẽ xảy ra khi bạn sử dụng Array
như chìa khóa cho Scala Map
:
scala> Map(Array(1) -> 1, Array(1) -> 2)
res7: scala.collection.immutable.Map[Array[Int],Int] = Map(Array(1) -> 1, Array(1) -> 2)
Nếu bạn muốn sử dụng một bộ sưu tập như chính bạn nên sử dụng một cấu trúc dữ liệu bất biến như một Vector
hoặc một List
.
scala> Map(Array(1).toVector -> 1, Array(1).toVector -> 2)
res15: scala.collection.immutable.Map[Vector[Int],Int] = Map(Vector(1) -> 2)
Xem thêm:
Bạn có thể xin hãy giải thích? Bạn muốn làm gì với các phím? hoặc những gì bạn muốn chìa khóa mà bạn không thể? – TravisJ