2011-11-29 58 views
12

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?

+2

Bạn đã thử chạy một ứng dụng thử nghiệm đơn giản chưa? –

+2

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

+3

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

Trả lời

19

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.

+0

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

+0

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

+4

@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

8

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.

+2

+1 Đây chính là lý do tại sao 'Từ điển' tồn tại. – James

+2

Liệu bản thân HashTable có tốt hơn không? – SBoss

+2

@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. –

-1

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

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