Khi tiêu đề hỏi, tôi tự hỏi liệu phương thức size() trong lớp LinkedList có phân bổ thời gian O (1) hoặc O (n) không.Độ phức tạp thời gian của một kích thước() gọi trên một LinkedList trong Java là gì?
Trả lời
Đó là O (1). Bạn có thể google cho mã nguồn và bạn sẽ đến như vậy:
Từ http://www.docjar.com/html/api/java/util/LinkedList.java.html
Tất cả các lớp học Bộ sưu tập Tôi đã xem xét tại cửa hàng một kích thước như là một biến và không lặp qua tất cả mọi thứ để có được nó .
ctrl-click trong NetBeans sẽ tìm thấy nó thậm chí còn nhanh hơn google;) – Superole
O (1) như bạn sẽ nhận thấy có bạn nhìn vào mã nguồn ...
Từ LinkedList:
private transient int size = 0;
...
/**
* Returns the number of elements in this list.
*
* @return the number of elements in this list
*/
public int size() {
return size;
}
Và nếu bạn không sử dụng triển khai của Sun thì sao? http://en.wikipedia.org/wiki/Java_Class_Library#Alternative_implementations Tôi nghĩ câu hỏi của anh ta là liệu nó có được bảo đảm là O (1), chứ không phải là O (1) trong bất kỳ phiên bản/triển khai cụ thể nào. – jalf
Việc triển khai đã giống nhau kể từ 1.2 khi LinkedList được giới thiệu, do đó, nó sẽ luôn là O (1) –
Đây là từ Java 1.6. Điều này không phụ thuộc vào VM nhưng (theo lý thuyết) có thể khác với các phiên bản cũ của thư viện chuẩn. Kiểm tra nguồn phiên bản của bạn nếu bạn muốn chắc chắn 100%, nhưng không có nhà phát triển lành mạnh nào sẽ tính toán kích thước theo yêu cầu cho thứ gì đó như thế này, nơi mọi thứ trong bộ nhớ và bạn có thể kiểm tra nó khi cấu trúc được tạo. – Kris
Lưu ý, đối với cấu trúc đồng thời, kích thước tính toán có thể chậm và không có vấn đề gì. –