Nói rằng tôi có một lượt Array[Int]
thích
val array = Array( 1, 2, 3 )
Bây giờ tôi muốn nối một phần tử vào mảng, giả sử giá trị 4
, như trong ví dụ sau:
val array2 = array + 4 // will not compile
Tất nhiên tôi có thể sử dụng System.arraycopy()
và làm điều này một mình, nhưng phải có một chức năng thư viện Scala cho việc này, mà tôi chỉ đơn giản là không thể tìm thấy. Cảm ơn cho bất kỳ gợi ý!
Ghi chú:
Tôi biết rằng tôi có thể nối thêm một Mảng các phần tử khác, như trong dòng sau, nhưng điều đó có vẻ quá vòng vo:
val array2b = array ++ Array( 4 ) // this works
Tôi nhận thức được những ưu điểm và nhược điểm của List vs Array và ở đây tôi vì nhiều lý do đặc biệt quan tâm đến việc mở rộng một Array.
Chỉnh sửa 1
Cảm ơn các câu trả lời chỉ đến :+
phương pháp toán tử. Đây là những gì tôi đang tìm kiếm. Thật không may, nó chậm hơn so với việc triển khai phương thức append () tùy chỉnh bằng cách sử dụng arraycopy
- chậm hơn khoảng hai đến ba lần. Nhìn vào việc triển khai trong SeqLike[]
, một trình tạo được tạo, sau đó mảng được thêm vào nó, sau đó nối thêm được thực hiện thông qua trình xây dựng, sau đó trình tạo được hiển thị. Không phải là một triển khai tốt cho các mảng. Tôi đã thực hiện một điểm chuẩn nhanh so sánh hai phương pháp, xem xét thời gian nhanh nhất trong số mười chu kỳ. Thực hiện 10 triệu lần lặp lại một mục đơn nối vào một phiên bản mảng 8 phần tử của một số lớp Foo
mất 3,1 giây :+
và 1,7 giây với một append()
phương thức đơn giản sử dụngSystem.arraycopy();
thực hiện 10 triệu lần lặp lại phần nối thêm một mục trên mảng 8 phần tử của Long mất 2,1 giây :+
và 0,78 giây với append()
phương pháp đơn giản . Tự hỏi nếu điều này không thể được khắc phục trong thư viện với triển khai tùy chỉnh cho Array
?
Chỉnh sửa 2
Vì giá trị của nó, tôi đã gửi một vé: https://issues.scala-lang.org/browse/SI-5017
System.arraycopy(...)
được thay thế bằngArray.copy(...)
ArrayBuffer
được chuyển đổi sau lần nối cuối cùng vào một mảng (với toArray
) không?
ArrayBuffer
và+=
phương pháp của nó ? Điều đó sẽ cung cấp cho bạn phụ lục O (1) được khấu hao.