2012-03-13 25 views
5

Tôi biết rằng .keySet() trả về một tập hợp không được đặt hàng.Liệu hashmap.keyset() có trả về các khóa theo thứ tự chúng được thêm vào hashmap không?

Theo như tôi có thể nói, điều đó có nghĩa là tôi cần giữ một danh sách các phím để theo dõi thứ tự các khóa được thêm vào hashmap, đúng không?

+1

có thể trùng lặp với [Hành vi của các phương thứcSetSet() và values ​​() của LinkedHashMap] (http://stackoverflow.com/questions/9583650/behaviour-of-linkedhashmaps-keyset-and-values -methods) –

+0

Đây đúng hơn là một nhận xét về "Hành vi của * phương pháp keySet * HashMap" mặc dù. – aioobe

Trả lời

8

[...] điều đó có nghĩa là tôi cần giữ một danh sách các khóa để theo dõi thứ tự các khóa được thêm vào băm, đúng không?

Vâng, đúng vậy. Hoặc, bạn có thể sử dụng số LinkedHashMap để thực hiện điều này cho bạn.

Từ các tài liệu:

[...] thực hiện Điều này khác với HashMap ở chỗ nó duy trì một danh sách gấp đôi liên kết chạy qua tất cả các mục của nó. Danh sách liên kết này xác định thứ tự lặp lại, thường là thứ tự mà các phím được chèn vào bản đồ (thứ tự chèn). [...]

+0

Một khả năng khác là TreeMap. Lưu ý rằng tất cả các lớp này làm là đảm bảo rằng việc lặp lại sẽ theo thứ tự, không phải là Set được trả về bởi keySet() sẽ có bất kỳ thứ tự cụ thể nào. –

+0

hashmap được liên kết trông giống như những gì tôi cần. Làm cách nào để ghi đè removeEldestEntry để nó đi theo thứ tự chèn - không phải thứ tự truy cập? – bernie2436

+0

Hmm. Không chắc chắn ý bạn là gì theo thứ tự truy cập. Mục nhập lớn nhất có lẽ là khóa được chèn đầu tiên. – aioobe

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