tại thời điểm tôi đang sử dụng List<short>
làm bộ đệm để giữ mọi thứ trong khi tính toán được thực hiện cho từng giá trị dựa trên các giá trị khác tiếp tục xuống bộ đệm. Sau đó tôi nhận ra rằng điều này có lẽ không hiệu quả như tôi đã nói rằng List<>
là một danh sách liên kết vì vậy mỗi khi tôi làm whatever = myList[100];
điều xấu là phải nhảy xuống tất cả các nút khác trước tiên để có được giá trị tôi muốn. Tôi không muốn sử dụng một Mảng thông thường vì tôi đã tải được Add()
và Remove()
s đá xung quanh ở những nơi khác trong mã. Vì vậy, tôi cần một lớp kế thừa IList<T>
nhưng sử dụng cấu trúc dữ liệu mảng thông thường. Có ai biết một lớp trong. Net hoạt động theo cách này vì vậy tôi không phải viết của riêng tôi? Tôi đã thử sử dụng ArrayList nhưng nó 'aint chung chung!Danh sách cấu trúc dữ liệu C# Efficiency
Trả lời
Không, List<T>
là bộ sưu tập chung, không phải danh sách được liên kết. Nếu bạn cần thêm và xóa chức năng thì List<T>
là việc thực hiện hầu hết mọi người mặc định.
ok, cảm ơn ý tưởng của tôi rằng Danh sách <> là một danh sách được liên kết là sai: ( –
nếu trường hợp đó có lý do gì cho việc sử dụng một mảng thông thường trong danh sách? –
Để đơn giản khi bạn chỉ xử lý một sự cố định Số lượng và tập hợp các đối tượng – thecoop
List<T>
không sử dụng triển khai danh sách được liên kết. Bên trong nó sử dụng một mảng, do đó, nó xuất hiện để được chính xác những gì bạn cần. Lưu ý rằng, bởi vì nó là một mảng, loại bỏ/chèn có thể là một hoạt động tốn kém tùy thuộc vào kích thước của danh sách và mục vị trí được gỡ bỏ/chèn vào - O (n). Mặc dù không biết nhiều hơn về cách bạn đang sử dụng nó, tuy nhiên, thật khó để đề xuất một cấu trúc dữ liệu tốt hơn.
Trích dẫn từ phần Nhận xét của docs.
Danh sách (T) là lớp tương đương chung với lớp ArrayList. Nó thực hiện giao diện chung IList (T) sử dụng một mảng có kích thước được tăng động theo yêu cầu.
List<T>
được hỗ trợ bởi một mảng chứ không phải danh sách được liên kết. Các truy cập được lập chỉ mục của List<T>
xảy ra trong thời gian không đổi.
Ngoài câu trả lời chính xác của tvanfosson, nếu bạn không chắc chắn về cách thức hoạt động của nội bộ, chỉ cần tải lên .NET Reflector và bạn có thể thấy chính xác cách mọi thứ được triển khai. Trong trường hợp này, khoan xuống indexer của List<T>
cho chúng ta thấy đoạn mã sau:
public T this[int index]
{
get
{
if (index >= this._size)
{
ThrowHelper.ThrowArgumentOutOfRangeException();
}
return this._items[index];
}
// ...
nơi bạn có thể thấy rằng this._items[index]
là một mảng của các loại generic T
.
Bởi vì Reflector không còn miễn phí nữa, [ILSpy] (http://ilspy.net/) và [DotPeek] (http://www.jetbrains.com/decompiler/) là các lựa chọn thay thế miễn phí khác. –
- 1. Cấu trúc dữ liệu C#
- 2. Danh sách Javascript như cấu trúc dữ liệu?
- 3. Thư viện cấu trúc dữ liệu C
- 4. C: Cấu trúc dữ liệu căn chỉnh
- 5. Thêm tham chiếu đến cấu trúc vào danh sách C#
- 6. Cọ vẽ cấu trúc dữ liệu (Java)
- 7. java.util.Stack cấu trúc dữ liệu thích hợp?
- 8. cấu trúc dữ liệu và thuật toán sách điện tử
- 9. C++ cấu trúc vô danh
- 10. Cấu trúc dữ liệu trong Python
- 11. Mẫu cấu trúc dữ liệu RESTful
- 12. Tạo cấu trúc dữ liệu như cấu trúc dữ liệu trong Java
- 13. Cấu trúc dữ liệu Delphi nào có thể chứa danh sách các số nguyên duy nhất?
- 14. Làm cách nào để tạo Cấu trúc dữ liệu danh sách được liên kết trong Java?
- 15. Chuyển đổi cấu trúc dữ liệu MIDI sang Java (Danh sách, Bản đồ băm, ???)
- 16. Toán tử nhân được áp dụng cho danh sách (cấu trúc dữ liệu)
- 17. hiện linux shell hỗ trợ danh sách cấu trúc dữ liệu?
- 18. cấu trúc dữ liệu cơ bản của danh sách STL, vector và thiết lập là gì?
- 19. Danh sách các cấu trúc dữ liệu cơ bản - tôi thiếu gì?
- 20. Danh sách sắp xếp cấu trúc dữ liệu Python theo thứ tự bảng chữ cái
- 21. Có cấu trúc dữ liệu trung gian nào được tạo trong danh sách hay không
- 22. Cấu trúc và cấu trúc dữ liệu khác nhau
- 23. Cấu trúc cơ sở dữ liệu SQL
- 24. Hướng dẫn cấu trúc dữ liệu cây trong C
- 25. Cấu trúc dữ liệu chức năng trong C++
- 26. Sao chép dữ liệu có cấu trúc trong C++
- 27. Loại dữ liệu cấu trúc trong Mathematica?
- 28. Tái cấu trúc lớp dữ liệu
- 29. Thuật toán và cấu trúc dữ liệu
- 30. Tôi sử dụng cấu trúc dữ liệu nào ở đây?
Thành thật mà nói, tôi không nghĩ rằng bạn sẽ phải căng thẳng quá nhiều về hiệu quả. Bất kỳ lợi ích nào bạn nhận được sẽ hầu như không đáng chú ý – lomaxx
'Danh sách <>' không phải là danh sách được liên kết. 'LinkedList <>' tuy nhiên là. Bạn có thể nhận thấy rằng bởi vì nó không có ý nghĩa để lộ truy cập ngẫu nhiên trong một danh sách liên kết. – Dykam
Truy cập được lập chỉ mục vào Danh sách là hoạt động O (1). – digEmAll