Sự khác biệt trong Bản đồ băm của Java 7 và Java 8 khi cả hai hoạt động trên thuật toán phức tạp liên tục là gì? Theo sự hiểu biết của tôi tìm kiếm bản đồ băm trong thời gian liên tục bằng cách tạo ra một khóa băm cho một đối tượng thông qua hàm băm.Sự khác biệt trong bản đồ băm trong java 7 và 8
Trả lời
Trong Java 7 sau khi tính toán hàm băm từ hàm băm nếu có nhiều thì một phần tử có cùng giá trị băm so với tìm kiếm tuyến tính do đó độ phức tạp là (n). Trong Java 8 tìm kiếm đó được thực hiện bằng tìm kiếm nhị phân để độ phức tạp sẽ trở thành nhật ký (n). Vì vậy, khái niệm này là sai, bản đồ băm tìm kiếm một đối tượng phức tạp liên tục bởi vì nó không phải là trường hợp ở tất cả các lần.
Thực ra có một ngưỡng, Nó được mô tả trong JEP180, khi một thùng/bin có nhiều hơn TREEIFY_THRESHOLD = 8 mục, nó sẽ được chuyển thành cây. Trong Java 7, nơi va chạm đã được tìm kiếm tuyến tính có một bảo vệ DOS: một Xord hạt giống ngẫu nhiên với các băm để làm cho chúng ít có thể dự đoán được. Hàm này được loại bỏ trong Java 8. – eckes
Nếu chúng ta đi sâu vào việc thực hiện, nó chính xác là những gì bạn đã giải thích @eckes – MDaniyal
Bạn có thể thấy các vấn đề mới nhất của Chuyên gia Java newsletter rất hữu ích. Nó đi vào chiều sâu thảo luận về băm trong Java trong suốt nhiều năm; ví dụ chỉ ra rằng bạn nên đảm bảo rằng các khóa bản đồ của bạn thực hiện Comparable (khi sử dụng Java8).
- 1. Sự khác biệt giữa HashMap và Bản đồ trong Java ..?
- 2. java 8 - luồng, bản đồ và số khác biệt
- 3. Sự khác biệt giữa bản đồ và dict
- 4. Sự khác biệt giữa 'ký tự' và 'octet' trong băm
- 5. Sự khác biệt về luồng Java giữa bản đồ và bản đồToObj
- 6. java 8: sự khác biệt giữa class.getName() và String literal
- 7. Sự khác biệt giữa hai bản đồ
- 8. Sự khác biệt giữa bản đồ và bản đồAsync
- 9. Java 8 - Sự khác biệt giữa Optional.flatmap và Optional.map
- 10. Sự khác biệt giữa nhóm và lập bản đồ trong Bộ sưu tập (Java) là gì?
- 11. Java khác biệt ký tự đại diện trong 7 và 8
- 12. Sự khác biệt giữa '.' và "." trong java
- 13. Sự khác biệt giữa bản đồ và udf
- 14. Sự khác biệt giữa luồng(). Map() và stream.map ({}) trong java 8
- 15. Sự khác biệt giữa bản đồ và mỗi
- 16. Sự khác biệt giữa bản đồ và áp dụng trong sơ đồ là gì?
- 17. Làm thế nào để nhận được sự khác biệt của bản đồ trong java?
- 18. Sự khác biệt trong kế thừa trong C# và Java
- 19. Trong Java, bản đồ loại băm bởi key.length của nó()
- 20. sự khác biệt giữa java-1.7.0-openjdk-i386 và java-7-openjdk-i386
- 21. Sự khác biệt giữa một đối tượng và một băm?
- 22. Bản đồ băm trong Python
- 23. giá trị cập nhật trong Bản đồ trên cơ sở bản đồ khác trong Java
- 24. Tại sao bản đồ băm trong Java 8 sử dụng cây nhị phân thay vì danh sách liên kết?
- 25. Sự khác biệt giữa parseInt và valueOf trong java?
- 26. Sự khác biệt giữa System.load() và System.loadLibrary trong Java
- 27. Sự khác biệt giữa PriorityQueue và TreeSet trong Java?
- 28. Sự khác biệt giữa Gói và Thư mục trong Java
- 29. Sự khác biệt của `InputStream`` DataInputStream` và `BufferedInputStream` trong java?
- 30. Sự khác biệt giữa Observable.defer và Observable.create trong java rx
@MDaniyal trả lời chính xác mà không sử dụng cụm từ mô tả tình huống của hai hoặc nhiều phần tử có cùng một băm: "băm va chạm". Nếu bạn muốn nhìn sâu hơn vào các va chạm băm nói chung, tôi khuyên bạn nên bắt đầu ở đây: https://en.wikipedia.org/wiki/Hash_table#Collision_resolution – Jeutnarg