2013-09-27 49 views
15

Tôi tự hỏi tại sao LinkedList không có initialCapacity.tại sao LinkedList không có initialCapacity trong java?

Tôi biết rõ khi nào nên sử dụng ArrayList và khi LinkedList.

thực hành tốt của nó để xác định Bộ sưu tập kích thước cuối cùng như:

List<String> arraylist = new ArrayList<String>(5); 

Đối LinkedList ví dụ:

List<String> linkedlist = new LinkedList<String>(); // right way 

nhưng

List<String> arraylist = new LinkedList<String>(5); // compilation error 

Ai đó có thể lây lan một ánh sáng về vấn đề đó?

[EDIT]

BTW, tôi có thể viết

List<String> arraylist = new ArrayList<String>(5); 
List<String> linkedlist = new LinkedList<String>(arraylist); 
+2

trả lời * tại sao downvote? * Câu hỏi: [SO khuyến khích một số suy nghĩ và tìm kiếm trước] (http://stackoverflow.com/help/how-to-ask) trước khi đặt câu hỏi. Hàng tỷ trang trong internet giải thích sự khác biệt giữa ArrayList và LinkedList và đưa ra kiến ​​thức về nội bộ của nó, nó khá dễ hiểu tại sao không có phương pháp như vậy. Hỏi nó trên SO chỉ có nghĩa là bạn đã không cố gắng để làm nghiên cứu cơ bản với google. –

+3

Tôi có thể mở tài liệu (tôi đã làm) và tìm hiểu mọi thứ tôi cần. Tất cả những người muốn tìm một mô tả ngắn gọn (với hình ảnh) về câu hỏi được đề cập ở trên sẽ tìm thấy 4-5 câu trả lời khá tốt thay vì dành thời gian để quét tài liệu. Bây giờ trong hàng tỷ trang bổ sung, chúng tôi có thêm một trang nữa. SO không chỉ là tìm giải pháp "solo" mà còn giúp khởi động nhanh chóng. Tôi viết ngày hôm nay trên ~ 7 ngôn ngữ và tôi không có thời gian để quét tài liệu gốc. nhưng tìm chia sẻ điểm kinh nghiệm. từ các lập trình viên khác. –

Trả lời

28

LinkedList bởi bản chất không có "khả năng", vì nó không phân bổ bộ nhớ cho các mục trước khi các mục được thêm vào danh sách. Mỗi mục trong một LinkedList giữ một con trỏ đến mục tiếp theo trong danh sách.

http://www.stoimen.com/blog/wp-content/uploads/2012/06/0.-Arrays-vs.-linked-list.png

Sẽ không có điểm trong cấp phát bộ nhớ vào danh sách trước đó, kể từ LinkedList không có suất.

+0

"V" để đăng hình ảnh, nhờ –

+0

Vì vậy, tôi đoán ArrayList là một DataStructure dựa trên mảng vì nó chấp nhận dung lượng ban đầu cho bộ sưu tập. – Ajay

8

mô hình của nó không dựa trên một mảng mà là một danh sách liên kết thật sự, và vì vậy không có nhu cầu và đẩy mạnh nó sẽ không có ý nghĩa. Nó không có ý nghĩa nhiều để có các liên kết trống như bạn có các mục mảng trống.

2

Tại sao LinkedList có dung lượng ban đầu?

ArrayList được hỗ trợ bởi một mảng, do đó công suất ban đầu là kích thước ban đầu của mảng. LinkedList không cần điều đó.

2

Tại sao bạn cần dung lượng trên LinkedList? LinkedList không hoạt động với các mảng có kích thước cố định. Mỗi LinkedListElement có một con trỏ (một liên kết!) Cho Element tiếp theo trong danh sách. Do đó, có thể thêm phần tử vào danh sách được liên kết trong thời gian không đổi. Nhưng tốn kém khi có quyền truy cập ngẫu nhiên vào các phần tử trong Danh sách. Bạn cần phải đi qua tất cả các yếu tố trong danh sách cho đến khi bạn đạt đến đích của bạn.

1

Danh sách liên kết không cần giá trị ban đầu. Thats là sự khác biệt chính giữa mảng và danh sách liên kết.

mảng sẽ kết thúc ở đâu đó. Nhưng danh sách liên kết không. Danh sách được liên kết không hoạt động trên các giá trị biên.

1

Khi bạn khai báo một mảng, bạn phải biết kích thước của nó bởi vì con trỏ cần được tạo trong bộ nhớ. Một danh sách liên kết không cần điều này bởi vì không cần con trỏ tới bộ nhớ trước khi bất kỳ đối tượng nào được thêm vào danh sách.

Một danh sách liên kết được định nghĩa đệ quy như: một danh sách trống en yếu tố đó chỉ vào danh sách trống

do đó bất cứ khi nào bạn thêm một phần tử, bạn phân bổ bộ nhớ (hay đúng hơn là trong Java trình biên dịch thực hiện điều này) khi bạn tạo phần tử, và sau đó khi bạn thêm nó vào danh sách nó bây giờ trỏ đến danh sách (hoặc phần tử cuối cùng trong danh sách trỏ đến nó).

Vì vậy, bạn không cần khai báo kích thước ban đầu của danh sách được liên kết vì danh sách được liên kết luôn bắt đầu với danh sách trống và khi phần tử được thêm vào danh sách.

Các vấn đề liên quan