Sự khác nhau giữa Dictionary
và Hashtable
là gì và làm cách nào để làm việc với lớp học Dictionary
trong Java?Sự khác biệt giữa Hashtable và Từ điển là gì?
Trả lời
Dictionary
là lớp cơ sở trừu tượng là Hashtable
. Cả hai vẫn còn trong JDK cho khả năng tương thích ngược với mã cũ. Chúng tôi dự kiến sử dụng HashMap
và các triển khai khác của giao diện Map
được giới thiệu trong Java 1.2.
Đáng nói đến là Hashtable là luồng an toàn, trong khi HashMap thì không. Xem câu trả lời của tôi. – assylias
Hashtable đã được trang bị thêm để triển khai Bản đồ. – user2864740
Tôi đã tìm thấy một bài giảng về Nguyên tắc OOP có chứa câu trả lời mà bạn tìm kiếm:
EDIT:
điển Một chủ đề quan trọng trong tính toán là chủ đề của lưu trữ/truy xuất/xóa: lưu trữ dữ liệu ở đâu đó để sau này có thể được truy xuất và d iscarded nếu không còn cần thiết, tất cả điều này một cách hiệu quả nhất. Sự trừu tượng của các hoạt động tính toán này được thể hiện trong khái niệm về cái được gọi là từ điển, được biểu diễn bằng Java như một giao diện như sau.
Bàn Hash Một bảng băm là một sự tổng quát của một mảng bình thường. Khi số lượng khóa thực sự được lưu trữ nhỏ so với tổng số khóa có thể, bảng băm trở thành một thay thế hiệu quả để trực tiếp giải quyết mảng, vì bảng băm thường sử dụng một mảng có tỷ lệ thuận với số khóa thực sự được lưu trữ. Thay vì sử dụng khóa làm chỉ mục mảng trực tiếp, chỉ mục mảng được tính từ khóa. Với băm, phần tử có khóa k được lưu trữ trong khe h (k); tức là hàm băm h được sử dụng để tính toán khe từ khóa k. h maps tập U chìa khóa vào khe của một bảng băm T [0..m-1]: h: U -> {0, 1, ..., m - 1}
Lớp Từ điển là lớp cha trừu tượng của bất kỳ lớp nào, chẳng hạn như Hashtable, mà ánh xạ các khóa tới các giá trị. Mỗi khóa và mọi giá trị đều là một đối tượng. Trong bất kỳ đối tượng Từ điển nào, mỗi khóa được kết hợp với nhiều nhất một giá trị. Với một từ điển và một khóa, phần tử liên quan có thể được tra cứu. Bất kỳ đối tượng không null nào cũng có thể được sử dụng làm khóa và làm giá trị.
javadoc cho Dictionary có câu trả lời của bạn.
Lớp từ điển là cha mẹ trừu tượng của bất kỳ lớp nào, chẳng hạn như Hashtable, ánh xạ khóa cho giá trị.
Bạn không làm việc trực tiếp với Dictionary
, vì đây là lớp học abstract
.
Cũng lưu ý sau đây từ các tài liệu tương tự:
LƯU Ý: Lớp này là lỗi thời. Triển khai mới sẽ triển khai giao diện Map, thay vì mở rộng lớp này.
Hashtable
là triển khai Dictionary
. Bạn không thể sử dụng trực tiếp Dictionary
vì đó là lớp trừu tượng.
Nhưng bạn không nên sử dụng vì chúng đã được superceded bởi giao diện Map
và các lớp triển khai, trong đó HashMap
là phổ biến nhất.
Theo javadocs cho từ điển:
LƯU Ý: Lớp này là lỗi thời. Triển khai mới nên triển khai giao diện Bản đồ , thay vì mở rộng lớp này.
Hashtable cũng là JDK 1.0 vintage. Bạn nên sử dụng giao diện Bản đồ và các triển khai hiện đại hơn của nó: HashMap và TreeMap.
Dictionary
là lớp trừu tượng, siêu lớp của Hashtable
. Bạn không nên sử dụng Dictionary
vì nó là obsolete. Đối với Hashtable, lợi thế nó đã có hơn bản đồ khác như HashMap
là chủ đề an toàn, nhưng với sự ra đời của ConcurrentHashMap kể từ Java 1.5, không có lý do thực sự để sử dụng nó nữa - xem javadoc
Tính nền tảng Java 2 v1.2, lớp này được trang bị thêm để triển khai thực hiện giao diện Bản đồ, làm cho nó trở thành một thành viên của Khung công tác Bộ sưu tập Java. Không giống như các triển khai bộ sưu tập mới, Hashtable được đồng bộ hóa. Nếu không cần thực thi an toàn chỉ, bạn nên sử dụng HashMap thay cho Hashtable. Nếu bạn muốn triển khai đồng thời nhiều luồng an toàn, thì nên sử dụng ConcurrentHashMap thay cho Hashtable.
Nói tóm lại: Không sử dụng Dictionary
hoặc Hashtable
, trừ khi bạn thực sự phải vì những lý do tương thích, sử dụng một trong hai HashMap
nếu bạn không cần phải an toàn thread, hoặc ConcurrentHashMap
nếu bản đồ của bạn được sử dụng trong một đồng thời môi trường.
- 1. Sự khác nhau giữa từ điển và mảng là gì?
- 2. Sự khác nhau giữa Hashtable và Properties là gì?
- 3. Sự khác biệt thực sự giữa từ điển và bảng băm là gì?
- 4. Sự khác biệt giữa .Net Hashtable, Java Hashtable & HashMap
- 5. Sự khác biệt giữa HashMap và từ điển ADT
- 6. Sự khác biệt giữa đối tượng và từ điển?
- 7. Sự khác biệt b/w Hashtable, Dictionary và KeyValuePair là gì?
- 8. Sự khác biệt giữa build.sbt và build.scala là gì?
- 9. Sự khác biệt giữa "Thread.currentThread(). GetName" và "this.getName" là gì?
- 10. Sự khác biệt giữa Raphael và gRaphael là gì?
- 11. Sự khác biệt giữa engine.io và socket.io là gì?
- 12. Sự khác biệt giữa RadGrid.Rebind() và RadGrid.MasterTableView.Rebind() là gì?
- 13. Sự khác biệt giữa while (true) và loop là gì?
- 14. Sự khác biệt giữa (string [] args) và System.Environment.CommandLine là gì?
- 15. Sự khác biệt giữa .closest() và .parents ('selector') là gì?
- 16. Sự khác biệt giữa chẩn đoán và metaheuristics là gì?
- 17. Sự khác biệt giữa ASP.NET và ASP.NET MVC là gì?
- 18. SQLAlchemy: Sự khác biệt giữa flush() và commit() là gì?
- 19. là gì sự khác biệt giữa SQL_Latin1_General_CP1_CI_AS và SQL_Latin1_General_CP1_CI_AI
- 20. Sự khác biệt giữa JavaBean và POJO là gì?
- 21. Sự khác biệt giữa betweeen% INC và @INC là gì?
- 22. Sự khác biệt giữa INTERSECT và WHERE IN là gì?
- 23. Sự khác biệt giữa RoutedCommand và RoutedUICommand là gì?
- 24. Sự khác biệt chính giữa Sinatra và Ramaze là gì?
- 25. Sự khác biệt giữa DBI và DBD là gì?
- 26. Sự khác biệt giữa NSInvocation và chặn là gì?
- 27. Sự khác biệt giữa fn và fn * là gì?
- 28. Sự khác biệt giữa xtype và bí danh là gì?
- 29. Sự khác biệt giữa localname và qname là gì?
- 30. Sự khác biệt giữa Application.ThreadException và AppDomain.CurrentDomain.UnhandledException là gì?
Có rất nhiều nội dung hay trong google - http://docs.oracle.com/javase/tutorial/collections/implementations/index.html – Vic
Và trên stackoverflow - http://stackoverflow.com/questions/267312/different-between-a-hashmap-và-a-dictionary-adt – Vic
Nếu bạn có lựa chọn, bạn nên sử dụng 'Bản đồ' thay vì' Từ điển', đã lỗi thời. – assylias