Tôi đang viết một dịch vụ mà hiệu suất là cần thiết và tôi không chắc chắn điều nhanh nhất là gì. Tôi có một vài đối tượng (50-200) trong đó mỗi đối tượng có một ID trong đó (ints, ví dụ: 84397 hoặc 23845). Nó sẽ nhanh hơn để có một từ điển, một danh sách các cặp KeyValue hoặc một danh sách với các chỉ mục được thiết lập để các ID với phần còn lại có giá trị null hoặc một mảng với cùng một ý tưởng?Từ điển, Danh sách hoặc Mảng?
Trả lời
Tùy thuộc vào hoạt động bạn muốn thực thi. Giả sử rằng bạn muốn tìm một đối tượng có một mã định danh là.
- Các lớn mảng cách tiếp cận là nhanh nhất: Truy cập
myArray[84397]
là một hằng số thời gian hoạt động O (1). Tất nhiên, cách tiếp cận này đòi hỏi nhiều bộ nhớ nhất. - Từ điển gần như nhanh nhưng yêu cầu ít bộ nhớ hơn vì nó sử dụng một số hash table trong nội bộ.
- Danh sách các cặp cách tiếp cận là chậm nhất, vì bạn có thể phải duyệt toàn bộ danh sách để tìm mục nhập của bạn, mang lại độ phức tạp O (n).
Vì vậy, trong trường hợp của bạn, tôi sẽ chọn từ điển, trừ khi hiệu suất tốt hơn của mảng lớn thực sự có liên quan trong trường hợp của bạn.
Cảm ơn sự giúp đỡ, tôi sẽ sử dụng từ điển (giả sử nhẹ có nghĩa là một cái gì đó như 1ms nhanh hơn). – SBoss
Bạn đã viết "từ điển đòi hỏi ít bộ nhớ hơn" - không phải bạn muốn viết nó đòi hỏi bộ nhớ THÊM, vì nó sử dụng một bảng băm trong nội bộ? – BornToCode
@BornToCode: Nó yêu cầu bộ nhớ ít hơn so với tùy chọn trước đó, mảng lớn. Mảng khổng lồ yêu cầu * nơi lưu trữ tối đa *, trong khi từ điển chỉ yêu cầu xung quanh * các địa điểm lưu trữ * someConstant * numberOfElements *. – Heinzi
Dictionary<TKey, TValue>
sử dụng bảng băm nội bộ vì vậy tôi nghĩ rằng đó sẽ là bảng nhanh nhất.
+1 Đây chính là lý do tại sao 'Từ điển' tồn tại. – James
Liệu bản thân HashTable có tốt hơn không? – SBoss
@SBoss - Từ điển chung không sử dụng 'HashTable' trong nội bộ, vì vậy không. Một 'HashTable' là chậm hơn đáng kể khi bạn sử dụng ValueTypes, giống như bạn có kế hoạch làm với' int' của bạn. –
Dictionary versus List Lookup time
Ngoài ra, đối với một phần giải thích chi tiết hơn về các bộ sưu tập khác nhau, hãy kiểm tra this question.
Bạn cũng có thể sử dụng Hashtables. Từ điển nội bộ sử dụng nó anyway. nhưng từ điển có lợi thế là loại GENERIC mang lại cho bạn loại an toàn.
đây là chủ đề khác nhau Dictionary Vs HashTable Tôi hy vọng nó sẽ giúp bạn quyết định.
Praveen
- 1. Từ điển Danh sách
- 2. điển Chia danh sách thành danh sách các từ điển
- 3. Python - tạo từ điển từ danh sách các từ điển
- 4. Danh sách chung/Từ điển
- 5. tạo từ điển từ danh sách biến
- 6. Tạo từ điển từ danh sách python
- 7. Đọc danh sách Python cho từ điển trong từ điển?
- 8. Danh sách bản đồ vào từ điển
- 9. Danh sách các bộ vào từ điển
- 10. C# Danh sách như từ điển chính
- 11. Tạo danh sách các từ điển rỗng
- 12. Lặp lại danh sách từ điển
- 13. So sánh danh sách từ điển
- 14. các mục phù hợp từ hai danh sách (hoặc mảng)
- 15. Điền danh sách từ mảng
- 16. Hủy bỏ bản sao từ danh sách các từ điển
- 17. Làm cách nào để chuyển đổi danh sách từ điển sang từ điển danh sách bằng Python?
- 18. Tạo danh sách thuộc tính từ điển theo lập trình
- 19. trích mục từ danh sách các từ điển
- 20. Cách đặt từ điển theo thứ tự từ danh sách các danh sách?
- 21. Từ điển hoặc KeyedCollection?
- 22. Python: sắp xếp một từ điển của danh sách
- 23. Python unittest - khẳng định từ điển với danh sách
- 24. Tạo một Danh sách Từ điển với cx_Oracle
- 25. Từ điển C# hoặc chỉ tiếp tục sử dụng danh sách?
- 26. Python - Cách tốt nhất/Sạch nhất để xác định danh sách hoặc từ điển liên tục
- 27. Chuyển đổi danh sách sang từ điển bằng Python
- 28. Thêm các phần tử vào danh sách từ điển
- 29. Danh sách từ điển của Python [int: tuple] Sum
- 30. C# - Từ điển có hành vi của Danh sách Vòng?
Bạn đã thử chạy một ứng dụng thử nghiệm đơn giản chưa? –
Tôi đã bắt đầu nó, nhưng tôi nghĩ rằng yêu cầu sẽ hiệu quả hơn (đối với những người yêu cầu trong tương lai và tôi). – SBoss
Hoạt động nào bạn phải thực hiện với các đối tượng đó? Tìm kiếm theo khóa? Tìm kiếm giá trị? Nhiều chèn? Xóa khóa? – Marco