2012-04-02 50 views
11

thể trùng lặp:
When should I use a List vs a LinkedList
What is a great resource for learning about the implementation details of .NET generic collections?Có phải Danh sách <T> là một danh sách được liên kết không?

System.Collections.Generic.List<T> một loại linked list(không phải là LinkedList<T> lớp)?

A danh sách liên kết là cấu trúc dữ liệu bao gồm một nhóm các nút với nhau đại diện cho một chuỗi. Dưới hình thức đơn giản nhất, mỗi nút được bao gồm một mốc và tham chiếu (nói cách khác, một liên kết) đến nút tiếp theo trong chuỗi.

Linear Linked List
Danh sách liên kết có nút chứa hai trường: giá trị nguyên và liên kết đến nút tiếp theo.
Nút cuối cùng được liên kết với một terminator được sử dụng để biểu thị sự kết thúc của danh sách.

wikipedia.org

Nếu có, những loại danh sách liên kết là nó?

+1

Iftode @Adrian: câu hỏi này không được hỏi khi nào thì chọn 'Danh sách ' qua 'LinkedList '. – BoltClock

+0

@ BoltClock'saUnicorn, vâng, tôi nên đăng bài này làm bình luận –

Trả lời

23

Không, List<T> được hỗ trợ bởi một mảng - đó thực chất là phiên bản chung của ArrayList từ .NET 1.0. Từ tài liệu:

Lớp List<T> tương đương chung với lớp ArrayList. Nó thực hiện giao diện chung IList<T> bằng cách sử dụng mảng có kích thước được tăng động theo yêu cầu.

Lưu ý rằng do được hỗ trợ bởi một mảng, truy cập của nó thông qua chỉ mục là O (1) trái với O (N) cho danh sách được liên kết.

Nếu bạn muốn danh sách được liên kết, hãy sử dụng LinkedList<T>. Lưu ý rằng đây là gấp đôi danh sách được liên kết. Tôi không tin. NET hiển thị một loại đơn lẻ được liên kết.

+1

Bạn có nghĩa là nó được quản lý trong bộ nhớ như một mảng? Nhưng làm thế nào tôi có thể thêm một số lượng không xác định các đối tượng trong đó? Và tôi có thể loại bỏ một mục từ nó? –

+2

@JohnIsaiahCarmona: Tôi có nghĩa là nó có một biến mảng trong nội bộ. Mảng là một kích thước cố định (như * tất cả * mảng trong .NET) nhưng khi danh sách cần phát triển, một mảng mới được tạo và các phần tử hiện có được sao chép. Tương tự như vậy khi bạn xóa một mục, nó chỉ sao chép phần còn lại của các phần tử vào vị trí chính xác mới của chúng. –

4

List<T>, từ góc độ kỹ thuật ... là NOT một loại danh sách được liên kết.

Nếu bạn muốn có một danh sách liên kết trong C#:

  • thể sử dụng được xây dựng trong LinkedList<T> loại (ví đúp liên kết danh sách)
  • hoặc tạo một thực hiện của riêng bạn (nếu bạn muốn có một đơn lẻ liên kết một) - here's an example
Các vấn đề liên quan