Câu hỏi rất hay. Bạn cứ hình dung sự phối hợp của tụi nó như cách xử lý kẹt xe vậy ==> Khi hashCode() bị trùng, các key phải chui chung vào 1 bucket. Lúc này equals() sẽ đi soi từng thằng để lấy đúng data. Ban đầu tụi nó chỉ xếp hàng dọc (LinkedList), nhưng nếu kẹt đông quá (từ 8 phần tử) thì hàng tự "biến hình" thành Red-Black Tree để tốc độ quét vẫn mượt (O(logn) thay vì O(n)). Vậy nên dù có collision liên tiếp tại một chỗ, hiệu năng vẫn được bảo kê.Tuy nhiên, Tree chỉ là "cấp cứu cục bộ". Khi tổng số phần tử trong map quá đông (đạt 75% sức chứa), HashMap tung chiêu cuối là Rehashing — mở rộng gấp đôi "mặt đường" (số bucket) và tính toán phân bổ lại toàn bộ. Các phần tử trong Tree lúc nãy sẽ được tản mát ra các bucket mới. Vui cái là nếu chia xong mà bucket mới thưa thớt (<= 6 phần tử), nó lại tự thoái hóa ngược về LinkedList để tiết kiệm bộ nhớ.Túm cái váy lại: Red-Black Tree lo giữ tốc độ khi ùn tắc cục bộ, còn Rehashing là để mở rộng đường, giải tỏa traffic triệt để. Cảm ơn bác đã góp một comment cực chất lượng cho bài nhé!
Cảm ơn b nhiều nhé, đồng cảm ghê. Hồi trước mình cũng y hệt vậy, xem video thì gật gù mà lúc mở IDE lên là đầu óc trống trơn. Cứ bóp nát bài toán ra rồi mạnh dạn gõ bừa, dính bug tự fix dần là quen tay ngay đúng không b! 😁
Mình có thắc mắc, trong HashMap, nếu xảy ra nhiều collision liên tục dẫn đến rehashing, thì cơ chế hashCode(), equals(), bucket, và việc chuyển từ LinkedList sang Red-Black Tree sẽ phối hợp với nhau như thế nào để vẫn đảm bảo hiệu năng truy xuất?
Đọc xong bài này thấy đúng với bản thân mình thật 😄 Nhiều lúc xem tutorial thì hiểu hết, nhưng tự mở IDE lên lại không biết bắt đầu từ đâu. Cách tác giả phân tích mindset học lập trình rất thực tế và dễ ngộ ra vấn đề, cảm ơn tác gỉa vì bài viết chất lượng!
This article is exactly what I've been researching. Previously, I only used geo_point for simple distance searches around a location, so when faced with the requirement to draw a polygon to filter data by area, I was quite confused. After switching to geo_shape, I realized how powerful it is, especially for tracking or route mapping problems. I once tried building a system to store movement paths similar to the map movement in the game PolyTrack , needing to check if an object was within a defined area. That's when geo_shape with polygons and multi-polygons proved extremely useful. It's true that ES isn't just powerful for full-text search; its geo querying capabilities are also well worth exploring.
When I first started making small games, separating update() and draw() really helped me keep things organized and avoid weird bugs. It reminds me of how smooth timing feels in the FNF game, where the logic and visuals stay in sync even when performance drops a bit.
THẢO LUẬN
@#$%^&*()_+
Test comment Selenium
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
@#$%^&*()_+
Test comment Selenium
Test comment Selenium
Test comment Selenium
Cảm ơn bạn. Bài viết rất hay 😁
Dùng 1 card mạng thôi là được rồi á.
tôi thiết kế ban đầu để mọi thứ tường minh nhất có thể.
Câu hỏi rất hay. Bạn cứ hình dung sự phối hợp của tụi nó như cách xử lý kẹt xe vậy ==> Khi hashCode() bị trùng, các key phải chui chung vào 1 bucket. Lúc này equals() sẽ đi soi từng thằng để lấy đúng data. Ban đầu tụi nó chỉ xếp hàng dọc (LinkedList), nhưng nếu kẹt đông quá (từ 8 phần tử) thì hàng tự "biến hình" thành Red-Black Tree để tốc độ quét vẫn mượt (O(logn) thay vì O(n)). Vậy nên dù có collision liên tiếp tại một chỗ, hiệu năng vẫn được bảo kê.Tuy nhiên, Tree chỉ là "cấp cứu cục bộ". Khi tổng số phần tử trong map quá đông (đạt 75% sức chứa), HashMap tung chiêu cuối là Rehashing — mở rộng gấp đôi "mặt đường" (số bucket) và tính toán phân bổ lại toàn bộ. Các phần tử trong Tree lúc nãy sẽ được tản mát ra các bucket mới. Vui cái là nếu chia xong mà bucket mới thưa thớt (<= 6 phần tử), nó lại tự thoái hóa ngược về LinkedList để tiết kiệm bộ nhớ.Túm cái váy lại: Red-Black Tree lo giữ tốc độ khi ùn tắc cục bộ, còn Rehashing là để mở rộng đường, giải tỏa traffic triệt để. Cảm ơn bác đã góp một comment cực chất lượng cho bài nhé!
Cảm ơn b nhiều nhé, đồng cảm ghê. Hồi trước mình cũng y hệt vậy, xem video thì gật gù mà lúc mở IDE lên là đầu óc trống trơn. Cứ bóp nát bài toán ra rồi mạnh dạn gõ bừa, dính bug tự fix dần là quen tay ngay đúng không b! 😁
Mình có thắc mắc, trong HashMap, nếu xảy ra nhiều collision liên tục dẫn đến rehashing, thì cơ chế hashCode(), equals(), bucket, và việc chuyển từ LinkedList sang Red-Black Tree sẽ phối hợp với nhau như thế nào để vẫn đảm bảo hiệu năng truy xuất?
Đọc xong bài này thấy đúng với bản thân mình thật 😄 Nhiều lúc xem tutorial thì hiểu hết, nhưng tự mở IDE lên lại không biết bắt đầu từ đâu. Cách tác giả phân tích mindset học lập trình rất thực tế và dễ ngộ ra vấn đề, cảm ơn tác gỉa vì bài viết chất lượng!
😁😁cảm ơn bạn đã đọc và góp ý 😋
@nqubao1312 về điều này mình hoàn toàn đồng ý.
bài viết dài nhưng lan man quá
cảm ơn nhé!!!
This article is exactly what I've been researching. Previously, I only used geo_point for simple distance searches around a location, so when faced with the requirement to draw a polygon to filter data by area, I was quite confused. After switching to geo_shape, I realized how powerful it is, especially for tracking or route mapping problems. I once tried building a system to store movement paths similar to the map movement in the game PolyTrack , needing to check if an object was within a defined area. That's when geo_shape with polygons and multi-polygons proved extremely useful. It's true that ES isn't just powerful for full-text search; its geo querying capabilities are also well worth exploring.
When I first started making small games, separating update() and draw() really helped me keep things organized and avoid weird bugs. It reminds me of how smooth timing feels in the FNF game, where the logic and visuals stay in sync even when performance drops a bit.