Hướng dẫn cho các phương pháp khác nên - chỉ cần nghĩ triển khai hiệu quả sẽ như thế nào.
Hầu hết các hoạt động hàng loạt khác trên bộ sưu tập (hoạt động xử lý từng phần tử trong bộ sưu tập) là O(n)
, vì vậy chúng không được đề cập ở đó. Ví dụ như filter
, map
, foreach
, indexOf
, reverse
, find
...
Phương pháp trở về vòng lặp hoặc suối như combinations
và permutations
thường O(1)
.
Phương pháp liên quan đến 2 bộ sưu tập thường là O(max(n, m))
hoặc O(min(n, m))
. Đây là những zip
, zipAll
, sameElements
, corresponds
...
Phương pháp union
, diff
, và intersect
là O(n + m)
.
Biến thể sắp xếp, một cách tự nhiên, O(nlogn)
. groupBy
là O(nlogn)
trong quá trình triển khai hiện tại. indexOfSlice
sử dụng thuật toán KMP và là O(m + n)
, trong đó m
và n
là độ dài của chuỗi.
Các phương pháp như +:
, :+
hoặc patch
thường O(n)
là tốt, trừ khi bạn đang đối phó với một trường hợp cụ thể của một bộ sưu tập bất biến mà các hoạt động trong câu hỏi là hiệu quả hơn - ví dụ, thêm vào trước một thành phần trên chức năng List
hoặc thêm một phần tử vào một số Vector
.
Phương pháp toX
thường là O(n)
, vì chúng phải lặp lại tất cả các phần tử và tạo bộ sưu tập mới. Ngoại lệ là toStream
tạo bộ sưu tập một cách uể oải - vì vậy, nó là O(1)
. Ngoài ra, bất cứ khi nào X
là loại bộ sưu tập toX
chỉ trả về this
, là O(1)
.
Việc triển khai Iterator phải có các hoạt động O(1)
(khấu hao) next
và hasNext
. Việc tạo Iterator phải là trường hợp xấu nhất O(logn)
, nhưng O(1)
trong hầu hết các trường hợp.
Điều này có vẻ hơi lạ, như thể nó là bất cứ điều gì, nhưng một cấu trúc dữ liệu tầm thường hoàn toàn, có thể dễ dàng có một số thuật toán tốt hơn không tầm thường đối với một số hoạt động. Ví dụ, giao lộ trên TreeSets có thể không chỉ giống như kiểm tra từng phần tử của một tập hợp cho thành viên trong nhóm kia. – MGwynne
Điều quan trọng cần lưu ý là hiệu năng của bộ sưu tập với truy cập 'eC' hoặc' log (n) '. Điều này có vẻ hơi được tối ưu hóa cho 'Vector' nhưng tôi chưa kiểm tra các bộ sưu tập khác. – Debilski
@MGwynne - Tôi chỉ đề cập đến các phương pháp chưa được mô tả trong liên kết của bạn. Những người được mô tả trong liên kết có những phức tạp rất cụ thể và nổi bật. Bất cứ nơi nào một số phương pháp chung có thể được thực hiện hiệu quả hơn về phương pháp này, điều này thường được thực hiện, theo sự hiểu biết tốt nhất của tôi. – axel22