Tôi bắt đầu học Java. Khi nào tôi sẽ sử dụng HashMap trên TreeMap?Sự khác biệt giữa HashMap và TreeMap là gì?
Trả lời
TreeMap
là ví dụ về SortedMap
, có nghĩa là thứ tự của các khóa có thể được sắp xếp và khi lặp qua các khóa, bạn có thể mong đợi chúng sẽ theo thứ tự. Mặt khác,
HashMap
không đảm bảo như vậy. Do đó, khi lặp qua các khóa của một số HashMap
, bạn không thể chắc chắn thứ tự của chúng.
HashMap
sẽ hiệu quả hơn nói chung, vì vậy hãy sử dụng nó bất cứ khi nào bạn không quan tâm đến thứ tự của phím.
'HashMap' là hiệu quả hơn thời gian. 'TreeMap' có hiệu quả về mặt không gian hơn. – erickson
TreeMap chỉ hoạt động với các đối tượng Comparable, HashMap chỉ hoạt động với các đối tượng có thực thi hashCode() phù hợp. – Thilo
@erickson: bạn có thể đăng tham chiếu/liên kết để sao lưu câu lệnh này không? –
Sử dụng HashMap
hầu hết các lần nhưng sử dụng TreeMap
khi bạn cần khóa cần sắp xếp (khi bạn cần lặp lại khóa).
Bạn hầu như luôn sử dụng HashMap
, bạn chỉ nên sử dụng TreeMap
nếu bạn cần khóa của mình theo thứ tự cụ thể.
HashMap
được sử dụng để tra cứu nhanh, trong khi TreeMap
được sử dụng cho các lần lặp được sắp xếp trên bản đồ.
Tóm lại:
- HashMap: Cơ cấu Lookup-mảng, dựa trên hashCode(), tương đương với() triển khai, O (1) thời gian chạy phức tạp cho chèn và tìm kiếm, không được phân loại
- TreeMap: Cây cơ cấu, dựa trên compareTo() thực hiện, O (log (N)) runtime phức tạp cho chèn và tìm kiếm, sắp xếp
Trích từ: HashMap vs. TreeMap
Độ phức tạp o HashMap là O (1 + a). Phụ thuộc vào hàm hashCode "a" có thể đạt tới "n" trong trường hợp xấu nhất. – 30thh
Alo Với một cửa sổ khóa được sắp xếp, một khác biệt khác là với TreeMap, nhà phát triển có thể cung cấp (String.CASE_INSENSITIVE_ORDER) với các khóa String, do đó, trình so sánh bỏ qua trường hợp khóa khi thực hiện so sánh các phím trên truy cập bản đồ. Điều này là không thể đưa ra tùy chọn như vậy với HashMap - nó luôn luôn là trường hợp so sánh nhạy cảm trong HashMap.
Không cần thiết. Nếu bạn thực sự muốn điều này, bạn có thể đơn giản làm cho một trang trí cho một bản đồ, mà cho tất cả mọi thứ liên quan đến đầu vào quan trọng, bạn làm cho nó tất cả các trường hợp trên/dưới, và ủy quyền cho bản đồ trang trí. Bằng cách đó, không khó để có một hashmap "phân biệt chữ hoa chữ thường". Dù sao, câu trả lời này có lẽ là một chút off-topic: bạn chỉ nói về một trường hợp sử dụng rất cụ thể của treemap, mà tôi không thấy nó rất có ý nghĩa như một so sánh giữa hashmap/treemap –
Tôi sẽ nói chuyện về HashMap và TreeMap thực hiện trong Java:
HashMap - thực hiện giao diện bản đồ cơ bản
- thực hiện bởi một loạt các xô, mỗi thùng là một LinkedList của các mục nhập
- thời gian chạy của các phép toán cơ bản: put(), trung bình O (1), trường hợp xấu nhất O (n), xảy ra khi bảng là r được tiến hành; get(), remove(), trung bình O (1)
- không được đồng bộ hóa, để đồng bộ hóa nó:
Map m = Collections.synchronizedMap(new HashMap(...));
- Thứ tự lặp lại của bản đồ là không thể đoán trước.
TreeMap - thực hiện điều hướng giao diện bản đồ
- thực hiện bởi một cây đỏ-đen
- thời điểm thao tác cơ bản chạy: put(), get(), remove(), trường hợp xấu nhất O (lgn)
- không được đồng bộ hóa, để đồng bộ hóa:
SortedMap m = Collections.synchronizedSortedMap(new TreeMap(...));
- cung cấp lặp lại theo thứ tự. phím cao hơn(), lowerKey() có thể được sử dụng để có được người thừa kế và người tiền nhiệm của một khóa đã cho.
Tổng hợp, sự khác biệt lớn nhất giữa HashMap và TreeMap là TreeMap mà thực hiện NavigableMap<K,V>
, trong đó cung cấp các tính năng của lặp đặt hàng. Bên cạnh đó, cả HashMap và TreeMap đều là thành viên của khung công tác Bộ sưu tập Java. Bạn có thể điều tra source code of Java để biết thêm về triển khai của chúng.
HashMap
được triển khai bởi Bảng băm trong khi TreeMap
được triển khai bởi Red-Black tree
. Sự khác biệt chính giữa HashMap
và TreeMap
thực sự phản ánh sự khác biệt chính giữa Hash
và Binary Tree
, nghĩa là khi lặp lại, bảo đảm TreeMap có thể thứ tự khóa được xác định bằng phương thức compareTo() của phần tử hoặc bộ so sánh được đặt trong hàm tạo TreeMap.
Hãy xem following diagram.
- 1. Sự khác biệt giữa các đối tượng HashMap và Map trong Java là gì?
- 2. Sự khác biệt giữa HashMap và từ điển ADT
- 3. Sự khác biệt giữa HashMap và Bản đồ trong Java ..?
- 4. Sự khác biệt giữa JavaBean và POJO là gì?
- 5. Sự khác biệt giữa betweeen% INC và @INC là gì?
- 6. Sự khác biệt giữa INTERSECT và WHERE IN là gì?
- 7. Sự khác biệt giữa RoutedCommand và RoutedUICommand là gì?
- 8. Sự khác biệt chính giữa Sinatra và Ramaze là gì?
- 9. Sự khác biệt giữa DBI và DBD là gì?
- 10. Sự khác biệt giữa NSInvocation và chặn là gì?
- 11. Sự khác biệt giữa fn và fn * là gì?
- 12. Sự khác biệt giữa xtype và bí danh là gì?
- 13. Sự khác biệt giữa build.sbt và build.scala là gì?
- 14. Sự khác biệt giữa localname và qname là gì?
- 15. Sự khác biệt giữa Application.ThreadException và AppDomain.CurrentDomain.UnhandledException là gì?
- 16. Sự khác biệt giữa while (true) và loop là gì?
- 17. Sự khác biệt giữa dealloc và viewdidunload là gì?
- 18. Sự khác biệt giữa uint và System.UInt32 là gì?
- 19. Sự khác biệt giữa heuristic và thuật toán là gì?
- 20. Sự khác biệt giữa decodeURIComponent và decodeURI là gì?
- 21. Sự khác biệt giữa \ r và \ n là gì?
- 22. Sự khác biệt giữa phần .got và .got.plt là gì?
- 23. Sự khác biệt giữa ascx và .cshtml là gì?
- 24. Trong Ember.js, sự khác biệt giữa [] và Ember.A ([]) là gì?
- 25. Sự khác biệt giữa Thông báo và pynotify là gì?
- 26. Sự khác biệt giữa to_a và to_ary là gì?
- 27. sự khác biệt giữa callback là gì và hứa
- 28. Sự khác biệt giữa Request.ServerVariables ["REMOTE_ADDR"] và Request.UserHostAddress là gì?
- 29. Sự khác biệt giữa .closest() và .parents ('selector') là gì?
- 30. Sự khác biệt giữa isset và empty là gì?
Stackoverflow không chỉ dành cho người hỏi câu hỏi mà còn cho những người khác tìm kiếm câu trả lời. Vì vậy, nó là hoàn toàn tốt cho tôi nếu tôi tìm thấy một câu trả lời ở đây cũng được chứa trong một số cuốn sách tôi không có ... –